来自c#-dll的c ++调用函数失败

问题描述 投票:0回答:1

我写了一个c#(net 3.5)dll并通过Robert Giesecke的“Unmanaged Exports”输出了一些函数:

[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 ++项目中正确捕获错误?

谢谢!

c# c++ dll
1个回答
1
投票

在阅读Hans Passant的评论后,我发现了这个问题。我能够收到一条错误消息,通知我,我引用的一个dll没有强名。纠正解决了问题。

谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.