我正在尝试链接 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
一个)是相同的字符串,它应该包含Pastused
c++中保存的变量(如我的第一篇文章中所述)。一旦它在 c# 中遇到 String str 的断点,我就会得到异常:
Print.PastUsed = 'Print.PastUsed' threw an exception of type 'System.Runtime.InteropServices.COMException'