我写了一个c#(net 3.5)dll并通过Robert Giesecke的“Unmanaged Exports”输出了一些函数:
[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 ++菜鸟)
问题:
谢谢!
在阅读Hans Passant的评论后,我发现了这个问题。我能够收到一条错误消息,通知我,我引用的一个dll没有强名。纠正解决了问题。
谢谢!