链接c++;和c# 我试图链接C++定义的库,以便它们在C语言中使用。 我有一个 CString PastUsed ,它保存C++中的变量,我正在尝试 在C#中访问 C++中,我将变量 PASSFORE < /COD>的值存储在'.ODL文件中 BSTR-passused。我正在使用DISP\u PROPERTY\u EX作为调度映射 DISP_PROPERTY_EX(Cpctr, "PastUsed", GetPastUsed, SetPastUsed, VT_BSTR).
我从链接c++;和c# 我试图链接C++定义的库,以便它们在C语言中使用。 我有一个 CString PastUsed ,它保存C++中的变量,我正在尝试 在C#中访问 C++中,我将变量 PASSFORE < /COD>的值存储在'.ODL文件中 BSTR-passused。我正在使用DISP\u PROPERTY\u EX作为调度映射 DISP_PROPERTY_EX(Cpctr, "PastUsed", GetPastUsed, SetPastUsed, VT_BSTR).,c#,c++,C#,C++,我从GetPastUsed返回字符串变量的值。 但是,我不认为这个值被保存在PastUsed(定义见 .odl)。我假设这种情况正在发生,因为当我尝试访问它时 变量(passusedfrom.odl)在C#中,我得到一个com异常 我在C++中检索C++定义变量的代码是: private void GetPastUsedDes_Click(Object eventSender, EventArgs eventArgs) { if (CheckInvalidButtonClick())
GetPastUsed
返回字符串变量的值。
但是,我不认为这个值被保存在PastUsed
(定义见
.odl)。我假设这种情况正在发生,因为当我尝试访问它时
变量(passused
from.odl)在C#中,我得到一个com异常
<>我在C++中检索C++定义变量的代码是:
private void GetPastUsedDes_Click(Object eventSender, EventArgs eventArgs)
{
if (CheckInvalidButtonClick())
{
return;
}
PrintLine("Dumping past Used");
AxPBSPRINTLib.AxPBSprint sPrint = mPBSPrintCtrl;
String str = mPBSPrintCtrl.PastUsed;
String str = Print.PastUsed;
}
过去使用的passused
(这里是c#中的一个上方)是应该使用的同一字符串
包含C++中的变量> PASTHORY C++(如我的第一个描述)
邮政)。当它到达c#中字符串str的断点时,我得到
例外情况:
Print.PastUsed = 'Print.PastUsed' threw an exception of type 'System.Runtime.InteropServices.COMException'
在我看来,它像是COM代码 您将使用COM互操作(通过引用typelibrary并为COM接口使用生成的互操作类) 看
CComPtr
就是这样做的。我认为你需要发布一个小样本,只是IDL/ODL中的接口和C++中的一个最小实现。在我添加了:[id(41)]BSTR PastUsed的“.odl”文件中,我们看不到足够的内容来说明更多内容;与之关联的调度映射是:DISP_PROPERTY_EX(CPBSprintCtrl,“PastUsed”、GetPastUsed、SetPastUsed、VT_BSTR)。get,set的定义是:void CPBSprintCtrl::SetPastUsed(BSTR nNewValue){RefreshControl();}BSTR CPBSprintCtrl::GetPastUsed(){return m_pastUsed.AllocSysString();}要在整个平台上使用这个“pastUsed”,需要做什么??(在C#中用于COM库)?@user1515739 erm。。。看见此外,这并不是一个简单的例子,请参见