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

在C++中,我将变量PastUsed的值存储在“.odl”文件中,如下所示:BSTR PastUsed。我正在使用DISP_PROPERTY_EX作为调度图。

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

我从GetPastUsed返回String变量的值。
但是,我不认为此值已保存在PastUsed中(如
.odl)。我认为这是正在发生的原因,因为当我尝试访问此内容时
C#中的变量(.odl中的PastUsed),我收到了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;
}
PastUsed(在C#中位于上方)是应该用于的相同字符串
包含C++的Pastused中保存的变量(如我的第一篇中所述
发布)。只要在C#中达到String str的断点,我就会得到
异常(exception):
Print.PastUsed = 'Print.PastUsed' threw an exception of type 'System.Runtime.InteropServices.COMException'

最佳答案

在我看来,它像COM代码。

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

看到

  • COM Interop Part 1: C# Client Tutorial (C#)
  • COM Interop Gets Much Better in C# 4.0
  • 09-08 00:53