日期:2014-05-17  浏览次数:20829 次

C#的ClassLibrary实现一个com组件,VC能用C#反而不能用?
本帖最后由 u013440889 于 2014-01-20 20:18:33 编辑
(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,然后调用
<