![](/img/trans.png)
[英]unmanaged c++ dll called from c#, crashes when CString used in dll
[英]How to call an unmanaged C++ DLL With CString Reference
使用VS2010,我正在圍繞非托管C ++ DLL構建一個C ++ / CLI包裝DLL,該DLL在其公共接口中使用MFC CString。 非托管C ++ DLL包含我需要訪問的類。 我的問題是此類包含使用CString引用的方法,例如:
BOOL GetUnits(eSysOfUnits sysUnit, CString &Unit, Cstring &Format);
在我的C ++ / CLI包裝器中,我試圖像這樣訪問它
BOOL GetUmUnits(eSysU sysunit, String^ %cunit, String^ %format)
{
GetUnits(sysunit, marshal_as<CString>(cunit), marshal_as<CString>(format));
}
這給了我一個編譯器錯誤說明
C2665:msclr :: interop :: marshal_as:3個重載都不能轉換所有參數類型
GetUmUnits將通過C#表單進行訪問。 cunit和格式需要通過未管理的代碼進行更新。
我在做什么錯是不可能的嗎?
包裝程序將不得不將托管的String^
轉換為實際的CString
對象,並將其直接傳遞。 編組員不知道如何創建CString
對象。
在MFC的不同版本中有CString
的不同版本,因此您必須鏈接到與非托管DLL生成的MFC版本相同的MFC版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.