У меня были некоторые проблемы с передачей строки как PChar в встроенную DLL-библиотеку Delphi, и я решил ее благодаря Jens Mühlenhoff.
Теперь у меня есть другая проблема -
Я сделал успешный обратный вызовметода c # при передаче в DLL, если объявление Delphi является обычной процедурой типа, но если объявление Delphi является процедурой типа метода, я получаю сообщение об ошибке «Попытка чтения или записи в защищенную память».
Я попытался найти ...
Вот объявление Delphi
TCallBack = procedure ( s : String) of object;stdcall;
Вот код C #
[DllImport(
"DLLTest.dll",
CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Ansi,
EntryPoint = "DLL_Test"
)]
public static extern void DLL_Test(IntPtr p, [MarshalAs(UnmanagedType.LPStr)] string Location, int AIntValue);
public delegate void MethodCallBackEvent(string s);
public event MethodCallBackEvent Info;
public void GetInfo(string s)
{
MessageBox.Show("Info: " + s);
}
, используемый как
Info = GetInfo; //or Info = new MethodCallBackEvent(GetInfo);
IntPtr p = Marshal.GetFunctionPointerForDelegate(Info);
DLL_Test(p, "location message", 10);