C++ 如何将IntPtr类型的参数从c项目传递到我的COM DLL项目
我有一个类型库项目MyLib,我必须在其中添加一个新方法,如下所示。当从我的C客户机应用程序调用时,它应该以IntPtr作为参数 下面是MyLib项目中方法的IDL定义:C++ 如何将IntPtr类型的参数从c项目传递到我的COM DLL项目,c++,c#-4.0,com,atl,typelib,C++,C# 4.0,Com,Atl,Typelib,我有一个类型库项目MyLib,我必须在其中添加一个新方法,如下所示。当从我的C客户机应用程序调用时,它应该以IntPtr作为参数 下面是MyLib项目中方法的IDL定义: [id(9), helpstring("method PrintFile"), local] HRESULT PrintFile([in] HANDLE pDevMode); 有人能告诉我IDL文件中的特定参数应该使用什么类型吗 以下是我的C客户机项目代码: PrintDialog PrntDlg = new PrintD
[id(9), helpstring("method PrintFile"), local]
HRESULT PrintFile([in] HANDLE pDevMode);
有人能告诉我IDL文件中的特定参数应该使用什么类型吗
以下是我的C客户机项目代码:
PrintDialog PrntDlg = new PrintDialog();
PrintDocument printDocument = new PrintDocument();
printDocument.DocumentName = "filename";
PrntDlg.Document = printDocument;
PrntDlg.AllowSelection = true;
PrntDlg.AllowSomePages = true;
if (PrntDlg.ShowDialog() == DialogResult.OK)
{
IntPtr PDevMode = PrntDlg.PrinterSettings.GetHdevmode();
MyLib.PrintFile(PDevMode);
}
在IDL定义中使用句柄时,会引发以下异常:
无法将“System.\u ComObject”类型的COM对象强制转换为接口类型
您可以简单地使用void*或LPVOID将无格式指针传递到非托管COM接口。看看这个
然而,在C中创建指针使客户机适合库通常是API设计不好的标志。您应该创建一个适合您试图实现的目的的对象或包装器,并将该对象的实例传递给该方法。这增加了兼容性并使编写客户机变得更容易