从c#-dll调用c ++失败

时间:2018-09-03 13:28:23

标签: c# c++ dll

我编写了一个c#(net 3.5)dll,并通过Robert Giesecke的“非托管导出”导出了一些功能:

[DllExport("VersionString", CallingConvention =
CallingConvention.Cdecl)] 

public static string VersionString() { .... return "test"; }

然后我为我的c#-dll写了一个c ++包装器。在c ++中,我分别调用LoadLibraryGetProcAddress以获得对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 ++菜鸟)

问题:

  • 在以下情况下,对c#函数的调用失败可能是什么原因? 其他库是否已添加到C#项目?
  • 如何在我的c ++项目中正确捕获错误?

谢谢!

1 个答案:

答案 0 :(得分:1)

在阅读了汉斯·帕桑特的评论后,我发现了问题所在。 我能够收到一条错误消息,通知我我所引用的dll的一个没有好名字。 更正可以解决问题。

谢谢!