C# COM INTEROP in c++
C# COM INTEROP in c++
我正在尝试从C 客户端拨打我的C#dll,到目前为止,我都有DLL所有设置和注册表中的DLL(我可以从电源壳中创建并调用它,例如)。
我遇到的问题是我无法从C 代码中调用它。
我的C#接口:
namespace MyInterop
{
[Guid("BE507380-1997-4BC0-AF01-EE5D3D537E6B"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IMyDotNetInterface
{
void ShowCOMDialog();
}
}
我的C#类实现接口:
namespace MyInterop
{
[Guid("38939B1E-461C-4825-80BB-725DC7A88836"), ClassInterface(ClassInterfaceType.None)]
public class MyDotNetClass : IMyDotNetInterface
{
public MyDotNetClass()
{ }
public void ShowCOMDialog()
{
MessageBox.Show("I am a" +
" Managed DotNET C# COM Object Dialog");
}
}
}
非常简单,因为我目前正在测试。我现在将TLB导入我的C 文件
#import "<Path to file>MyInterop.tlb" raw_interfaces_only
最后,我尝试称其为:
HRESULT hr = CoInitialize(NULL);
MyInterop::IMyDotNetInterfacePtr MyDotNetClass(__uuidof(MyInterop::MyDotNetClass));
MyDotNetClass->ShowCOMDialog();
CoUninitialize();
但是,VS告诉我Showcomdialog不是我界面的成员。我错过了什么吗?
通过声明 raw_interfaces_only
,您已经将包装函数的生成旋转,如本链接中所示。而且,由于您的接口基于IDispatch
,因此您被迫通过IDISPATCH的Invoke
间接调用接口方法。
建议:
- 将您的接口类型更改为
ComInterfaceType.InterfaceIsDual
或ComInterfaceType.InterfaceIsIUnknown
- 删除
raw_interfaces_only
以使用生成的包装器功能。
相关文章:
- netcat command in c++
- Difference in displaying cv2 Mat
- C++ MFC Libraries in Travis CI
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- 创建具有 new in 函数和"this is nullptr"异常的对象
- IN, OUT, INOUT Parameters
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 有人安装"IITB Simplecpp in mac"吗?
- 从 C 样式字符串中删除子字符串 "in place" 在C++代码中
- 如何修复"error: ‘_1’ was not declared in this scope"?
- Softmax Implementation in C++
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- IF-nesting in c++
- Gurobi GRBModel and GRBmodel in C++
- Tensorflow Hub in C++
- Centos7 g++ "to_string is not in a member of std"
- InitializeCriticalSectionEx Not Located In KERNEL32.Dll
- 将 lambda 表达式传递给 std::function in C++
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- std::async from std::async in windows xp