C#的ClassLibrary实现一个com组件,VC能用C#反倒不能用
C#的ClassLibrary实现一个com组件,VC能用C#反而不能用?
(1)我新建了一个C#的ClassLibrary工程,Class1.cs里面写下以下代码:
然后在工程属性-->Build里面勾选"Register for COM interop",编译成功。
然后我新建了一个VC的工程,支持ATL的,用#import指令导入刚才生成的tlb文件,main函数如下,可以工作:
可是我如果建立一个C#的控制台程序,在工程试图里面右键Add reference,选择COM-->Type libraries,在列表里面选择ClasLIbrary1,就会弹出如下图所示的红框。
奇怪了,C#做的com组件,给VC用可以,给C#自己用却不可以。这到底是为什么呢?
------解决方案--------------------
不行,用vc做成dll,然后调用
------解决方案--------------------
以.net程序集的方式添加,也就是添加引用,选择.net程序集,然后浏览,添加。
------解决方案--------------------
VC聪明的认出了你的com是.net assembly,让你别绕远,直接引用assembly.
(1)我新建了一个C#的ClassLibrary工程,Class1.cs里面写下以下代码:
namespace ClassLibrary1
{
[Guid("DA07B88D-29F0-41cf-B3D3-611010E6F3FE")]
[ComVisible(true)]
public interface IComTest
{
int Plus(int one, int two);
int Minus(int one, int two);
int Sum(Array arr);
}
[Guid("04F4DC83-8883-4a03-BDBC-92D8630ECC1E")]
[ClassInterface(ClassInterfaceType.None)]
public class ComTest : IComTest
{
public int Plus(int a, int b)
{
return a + b;
}
public int Minus(int a, int b)
{
return a - b;
}
public int Sum(Array arr)
{
return (arr as int[]).Sum();
}
}
public class Class1
{
}
}
然后在工程属性-->Build里面勾选"Register for COM interop",编译成功。
然后我新建了一个VC的工程,支持ATL的,用#import指令导入刚才生成的tlb文件,main函数如下,可以工作:
int main(void)
{
CoInitialize(NULL);
IComTestPtr pt(CLSID_ComTest,NULL,CLSCTX_ALL);
_tprintf(_T("%d\n"),pt->Plus(2,3));
pt.Release();
CoUninitialize();
return 0;
}
可是我如果建立一个C#的控制台程序,在工程试图里面右键Add reference,选择COM-->Type libraries,在列表里面选择ClasLIbrary1,就会弹出如下图所示的红框。
奇怪了,C#做的com组件,给VC用可以,给C#自己用却不可以。这到底是为什么呢?
------解决方案--------------------
不行,用vc做成dll,然后调用
------解决方案--------------------
以.net程序集的方式添加,也就是添加引用,选择.net程序集,然后浏览,添加。
------解决方案--------------------
VC聪明的认出了你的com是.net assembly,让你别绕远,直接引用assembly.