链接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接口使用生成的互操作类)


我还意识到,在.odl中定义的“PastUsed”以及“GetPastUsed”和“SetPastUsed”也需要在MFC中实现自动化。有没有办法在现有的MFC上实现自动化???@user1515739拜托,我真的不知道你所说的“在MFC中实现自动化”是什么意思。我假设您需要使用来自MFC的相同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。。。看见此外,这并不是一个简单的例子,请参见