C# WCF Web 服务到 C++ DLL 调用
C# WCF web service to C++ DLL calls
在 Visual Studio 2015 中构建了一个 C++ 遗留 DLL,并且正在努力将一些 C++ 函数公开为 REST APIs。为此,在同一解决方案中创建了一个 WCF Web 服务项目,并尝试通过 DllImport 调用 C++ 函数。
[DllImport("ExtOutPutGenerator.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern int CreateFrameGenerators(string node, string axis);
在 C++ 代码中,上述函数声明为,
extern "C" __declspec(dllexport) int CreateFrameGenerators(const char* node, const char* axis);
现在,当我通过 DllImport 调用 C++ 函数时,它不起作用。
即,当我通过浏览器调用 REST API 时,它会给出以下消息。
The server encountered an error processing the request. See server logs for details.
我确定是在从 C# 内部调用 C++ 函数时发生了故障。不确定在哪里可以找到服务器日志。
出于测试目的,我在同一个解决方案中创建了一个示例 C++ 测试 DLL,然后通过 DllImport 调用它的函数并且工作正常。
所以问题似乎出在遗留的 C++ DLL 上。
我不知道还要寻找什么或如何解决问题。
所以我的问题是,
导致此问题的遗留 C++ DLL 可能是什么问题?任何特定的项目设置?
是否有另一种不使用 DllImport 实现此目的的方法?更简单、更清晰的东西可能适用于所有 C++ 项目?
假设您的所有编码部分都正确无误,另一个需要检查的重要事项是目标平台。 C++ 和 C# 需要为同一平台构建。
例如,如果 C++ DLL 设置为 x64,则 C# 也应使用 x64 构建。
在 Visual Studio 2015 中构建了一个 C++ 遗留 DLL,并且正在努力将一些 C++ 函数公开为 REST APIs。为此,在同一解决方案中创建了一个 WCF Web 服务项目,并尝试通过 DllImport 调用 C++ 函数。
[DllImport("ExtOutPutGenerator.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern int CreateFrameGenerators(string node, string axis);
在 C++ 代码中,上述函数声明为,
extern "C" __declspec(dllexport) int CreateFrameGenerators(const char* node, const char* axis);
现在,当我通过 DllImport 调用 C++ 函数时,它不起作用。
即,当我通过浏览器调用 REST API 时,它会给出以下消息。
The server encountered an error processing the request. See server logs for details.
我确定是在从 C# 内部调用 C++ 函数时发生了故障。不确定在哪里可以找到服务器日志。
出于测试目的,我在同一个解决方案中创建了一个示例 C++ 测试 DLL,然后通过 DllImport 调用它的函数并且工作正常。
所以问题似乎出在遗留的 C++ DLL 上。
我不知道还要寻找什么或如何解决问题。
所以我的问题是,
导致此问题的遗留 C++ DLL 可能是什么问题?任何特定的项目设置?
是否有另一种不使用 DllImport 实现此目的的方法?更简单、更清晰的东西可能适用于所有 C++ 项目?
假设您的所有编码部分都正确无误,另一个需要检查的重要事项是目标平台。 C++ 和 C# 需要为同一平台构建。
例如,如果 C++ DLL 设置为 x64,则 C# 也应使用 x64 构建。