项目里引用到EXChange 里面的一个CDOEXM.dll,引用的时候“未能添加对CDOEXM.dll的引用,请确保此文可访问性并且是一个有效的程序集或Com组件”!请问要怎么把它弄成COM组件啊!

解决方案 »

  1.   

    你怎么引用的,不是随便一个dll就可以添加到引用
      

  2.   

    是C#写的 dll 吗,其他语言麻烦点
      

  3.   

    C#引用自己编译的dll文件的话就比较简单了
      

  4.   

    看DLL是用什么技术写的,如果是native api的话不能直接引用,但可以使用p/invoke
      

  5.   

    1、如果是C# 的DLL 
    右键 你项目 下的 “引用”在浏览里 添加 
    然后 using 就行了如果是C++等 生成的DLL
    出来 在引用里添加 外,程序里就不是用using 来调用了例如:[DllImport("user32.dll", EntryPoint="MessageBox")]
     public static extern int MessageBox(int hWnd, String strMessage, String strCaption, uint uiType);DllImport具有五个命名参数:   a、CallingConvention 参数指示入口点的调用约定。如果未指定 CallingConvention,则使用默认值 CallingConvention.Winapi。   b、CharSet 参数指示用在入口点中的字符集。如果未指定 CharSet,则使用默认值 CharSet.Auto。   c、EntryPoint 参数给出 dll 中入口点的名称。如果未指定 EntryPoint,则使用方法本身的名称。   d、ExactSpelling 参数指示 EntryPoint 是否必须与指示的入口点的拼写完全匹配。如果未指定 ExactSpelling,则使用默认值 false。   e、PreserveSig 参数指示方法的签名应当被保留还是被转换。当签名被转换时,它被转换为一个具有 HRESULT 返回值和该返回值的一个名为 retval 的附加输出参数的签名。如果未指定 PreserveSig,则使用默认值 true。   f、SetLastError 参数指示方法是否保留 Win32"上一错误"。如果未指定 SetLastError,则使用默认值 false。
    使用时注意C#与C++之间的类型映射Wtypes.h 中的非托管类型 非托管C语言类型 托管类名 说明
    HANDLE void* System.IntPtr 32 位
    BYTE unsigned char System.Byte 8 位
    SHORT short System.Int16 16 位
    WORD unsigned short System.UInt16 16 位
    INT int System.Int32 32 位
    UINT unsigned int System.UInt32 32 位
    LONG long System.Int32 32 位
    BOOL long System.Int32 32 位
    DWORD unsigned long System.UInt32 32 位
    ULONG unsigned long System.UInt32 32 位
    CHAR char System.Char 用 ANSI 修饰。
    LPSTR char* System.String 或 System.StringBuilder 用 ANSI 修饰。
    LPCSTR Const char* System.String 或 System.StringBuilder 用 ANSI 修饰。
    LPWSTR wchar_t* System.String 或 System.StringBuilder 用 Unicode 修饰。
    LPCWSTR Const wchar_t* System.String 或 System.StringBuilder 用 Unicode 修饰。
    FLOAT Float System.Single 32 位
    DOUBLE Double System.Double 64 位