Hallo,
ich nutze eine Delphi-
Win32-
Dll in C# (.Net 4.0 VS2010).
Alle Funktionen arbeiten einwandfrei, bis auf die, welche eine Delphi-Boolean als
Rückgabewert haben. Diese schmeißen eine "AccessViolationException".
hier etwas Code:
Delphi function-Typedef:
DbOpen = function: Boolean; stdcall;
C# function Typedef:
Code:
[return: MarshalAs(UnmanagedType.Bool)]
protected delegate Boolean TMatriKSDbOpen();
protected TMatriKSDbOpen matriKSDbOpen;
C#-Seite Delphi-
Dll dynamisch laden
Code:
...LoadLibraryEx...
public Delegate CreateDynamicDllDelphi(string functionName, Type delegateType)
{
IntPtr funcAddr = GetProcAddress(dllHandle, functionName);
if (funcAddr == IntPtr.Zero)
throw new EntryPointNotFoundException("Function: " + functionName);
return Marshal.GetDelegateForFunctionPointer(funcAddr, delegateType);
}
matriKSDbOpen = (TMatriKSDbOpen)CreateDynamicDllDelphi("DbOpen", typeof(TMatriKSDbOpen));
Benutzen der C#-Seite:
Code:
bool openOk = matriKSDbOpen(); // throw AccessViolationException
ebenfals habe ich getestet:
[return: MarshalAs(UnmanagedType.I1)]
... und nun bin ich mit meinem Latein am ende