【发布时间】:2012-05-10 10:30:13
【问题描述】:
我有一个带有此功能的 delphi dll:
function writeRate(data: variant):Double ; stdcall;
我用这个方法从c#调用函数:
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate double WriteRate(object data);
protected void UpdateRateChannel(string myData)
{
IntPtr pDll = NativeMethods.LoadLibrary("mydll.dll");
IntPtr pAddressOfFunctionToCall = NativeMethods.GetProcAddress(pDll, "writeRate");
WriteRate writeRate = (WriteRate)Marshal.GetDelegateForFunctionPointer(pAddressOfFunctionToCall, typeof(WriteRate ));
double response = writeRate(myData);
bool result = NativeMethods.FreeLibrary(pDll);
}
但我得到了这个例外:
PInvokeStackImbalance was detected
如何调用 dll?我认为问题出在变体类型中。 谢谢!
【问题讨论】:
-
请问您为什么不使用“通常”的 PInvoke 方式导入函数,例如
[DllImport("mydll.dll")]private static extern ...? -
@ThorstenDittmar 如果您希望运行时控制 DLL 的位置,这就是这样做的方法。
-
啊!太好了 - 不知道你可以那样做。谢谢!