簡體   English   中英

從c#-dll調用c ++失敗

[英]c++ calling functions from c#-dll fails

我編寫了ac#(net 3.5)dll,並通過Robert Giesecke的“非托管導出”導出了一些功能:

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

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

然后我為我的c#-dll寫了一個c ++包裝器。 在c ++中,我調用LoadLibraryGetProcAddress以獲取對ac#函數的引用。

我可以調用該函數以獲取返回值。 奇跡般有效。

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 ++項目中正確捕獲該錯誤?

謝謝!

閱讀了Hans Passant的評論后,我發現了問題所在。 我能夠收到一條錯誤消息,通知我我所引用的dll的一個沒有好名字。 更正解決了問題。

謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM