我正在尝试从 ac# windows 服务调用 cpp dll 函数,但每次调用时 - 服务立即停止并且不显示任何错误或抛出异常,并且事件日志为空。我还尝试通过另一个程序集(在服务之外)进行 PInvoke 调用,它可以工作。该服务正在 x86 中编译(与程序集相同)。
有任何想法吗?
下面是我的代码:
[DllImport(@"C:\Test.dll",
EntryPoint = @"TestFn",
SetLastError = true,
CallingConvention = CallingConvention.Cdecl)]
private static extern int TestCppDll();
调用我只是调用TestCppDll();
这解决了我的问题:
我将 cpp 代码中的 TestFn fn 从
extern "C" __declspec(dllexport) int
TestFn()
{
return 1;
}
至:
extern "C" __declspec(dllexport) int __stdcall
TestFn()
{
return 1;
}
然后我更改了 c# 调用约定以使用 std 而不是 Cdecl