我编写了一个c#(net 3.5)dll,并通过Robert Giesecke的“非托管导出”导出了一些功能:
[DllExport("VersionString", CallingConvention =
CallingConvention.Cdecl)]
public static string VersionString() { .... return "test"; }
然后我为我的c#-dll写了一个c ++包装器。在c ++中,我分别调用LoadLibrary
和GetProcAddress
以获得对c#函数的引用。
我可以调用该函数以获取返回值。就像魅力一样。
HINSTANCE hJConnectInstance = LoadLibrary(L"JConnect.Base.dll");
typedef char *(__cdecl *func_i)();
func_i net_function = (func_i)GetProcAddress(hJConnectInstance, VersionString");
std::string result = std::string(net_function());
std::cout << "csharp result: " << result << std::endl;
但是我的目标是从.net返回JSON字符串,因此我将Newtonsoft.json添加到了我的C#项目中。
现在,每次我从包装器调用c#函数时,我都会在c ++中遇到错误。 该错误不在c#代码中,因为它在从另一个c#项目中调用时有效。
我什至不知道c ++会引发什么样的错误,因为我不知道如何正确地捕获它。 (我是c ++菜鸟)
问题:
谢谢!
答案 0 :(得分:1)
在阅读了汉斯·帕桑特的评论后,我发现了问题所在。 我能够收到一条错误消息,通知我我所引用的dll的一个没有好名字。 更正可以解决问题。
谢谢!