Calling C# COM DLL from C++
Calling C# COM DLL from C++
C++代码如下
#include "stdafx.h"
#include <Windows.h>
#import "C:shreyasDocumentsConsoleApplication1ConsoleApplication1binDebugConsoleApplication1.tlb" no_namespace
int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);
IMyClassPtr obj;
//iProgramPtr obj;
obj.CreateInstance(__uuidof(MyClass));
printf("value: %d",obj->display());
CoUninitialize();
getchar();
return 0;
}
C#代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
namespace demo
{
[ComVisible(true)]
public interface IMyClass
{
int display();
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
class MyClass : IMyClass
{
public int display()
{
Console.WriteLine("Hello");
return 10;
}
}
}
我想从C++代码中调用C#显示函数。我已经在C#项目属性中完成了所需的设置。在代码obj.CreateInstance(__uuid(MyClass));
中,MyClass
给出错误作为未定义的标识符。
编译ConsoleApplication1:时,请注意生成警告
警告MSB3214:"C:…\ConsoleApplication1\bin\Debug\ConsoleApplication 1.dll"不包含任何可以为COM互操作注册的类型。
这当然不好。您还可以通过Oleview.exe的View+Typelib命令查看.tlb文件。或者打开#import指令用文本编辑器生成的.tlh文件,在C++项目的Debug目录中找到它。您将看到MyClass完全丢失,从而导致编译错误。
这是因为:
class MyClass : IMyClass
你忘了申报public
。必需。
相关文章:
- 如何解决"invalid conversion from 'char' to 'const char*'"
- std::async from std::async in windows xp
- std::is_reference from std::any
- std::time_point from and to std::string
- "No suitable conversion function from 'std::string' to 'const char *' exists"
- std::chrono::time_point from std::string
- Visual accept std::string from std::byte iterator
- C++中链表的错误"Abort signal from abort(3) (sigabrt) "
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- C++ 中的"template <typename From, typename Tag> struct Alias;"是什么?
- from std::vector to adept::avector
- qt get child (Callout) from QChart
- Webassembly from Javascript
- Generate boost::uuids::uuid from boost::compute::detail::sha
- 什么是"Reading unbounded stream from standard input (Memory Management)"的例子
- Calling C++ dll from python
- 为什么我会收到"invalid conversion from 'Queue*/Stack*' to 'int'"错误消息?
- std::chrono 在从 main 或 from 类方法使用时给出不同的值
- Calling Python Script from Visual Studio C++ Solution
- Access C++ Enum from Swift