0

我正在尝试从 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

4

0 回答 0