2

我正在尝试链接 C++ 定义的库,以便在 C# 中使用它们。我有一个CString PastUsed在 C++ 中保存一个变量,我试图在 C# 中访问它。

PastUsed在 C++ 中,我将“.odl”文件中 的变量值存储为BSTR PastUsed. 我DISP_PROPERTY_EX用作调度地图。

DISP_PROPERTY_EX(Cpctr, "PastUsed", GetPastUsed, SetPastUsed, VT_BSTR).

我从 中返回 String 变量的值GetPastUsed。但是,我不认为这个值被保存在PastUsed(如.odl 中定义的那样)中。我假设正在发生这种情况,因为当我尝试PastUsed在 C# 中访问这个变量(来自 .odl)时,我得到了一个 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;
}

(这里是c#中的PastUsed一个)是相同的字符串,它应该包含Pastusedc++中保存的变量(如我的第一篇文章中所述)。一旦它在 c# 中遇到 String str 的断点,我就会得到异常:

Print.PastUsed = 'Print.PastUsed' threw an exception of type 'System.Runtime.InteropServices.COMException'
4

1 回答 1

2

对我来说,它看起来像 COM 代码。

您将使用 COM 互操作(通过引用类型库并为 COM 接口使用生成的互操作类)。

于 2012-07-17T19:27:13.630 回答