本人很菜,接触C#不久,厂商提供的SDK是ActiveX控件,ocx文件,要求不要用它的UI,所以进行封装,我建了一个类库工程把它封成了一个dll文件,原有的.ocx文件大小超过1M,我封装后的dll只有28K,在本机上编写的代码可以直接调用封装后的dll来完成以前ocx里的方法,但是代码移植到另外的机器上的时候就不能运行了,调试发现dll中封装的类的对象在代码中根本就没有被new。
    很困惑,
大家新年快乐。

解决方案 »

  1.   

    用 .NET 封装 OCX,生成的是一个代理类。要求目标电脑上注册原来的 OCX,以及正确安装 .NET Framework。
      

  2.   

    tlbimp   mydll.dll   /out:my.dll       
    首先添加引用 
    然后添加名字空间 
    然后使用
    不同电脑上后使用regsvr32注册
      

  3.   

    是不是封装的时候没有把sdk直接引入的并打包到里面吧
      

  4.   

    另外的机器上也要安装OCX控件你的 "封装后的dll" 只是代理类而已,还是要调用ocx的。
      

  5.   


    刚刚把ocx unreg了一下,报错是COMException的没有注册类别。机器上有VS2005,.NET正确安装了,以前的前辈封装的早些的ocx可以在目标机器上使用,是不是我没打包的原因?请教下我该怎么给类库工程打包。谢谢!兔年大吉!
      

  6.   


    请教tlbimp mydll.dll /out:my.dll   是什么意思呀?
    那个工程的引用名字空间,使用方法都是对的,ocx也在目标机器用regsvr32注册了。
    也有两个代理类AxInterop.XXXX.dll和Interop.XXXX.dll。
    报错好像是没有引用到真正的ocx,我不知道该怎么办啊。
    谢谢,新年快乐!
      

  7.   


    如果你使用notepad.exe编写程序,手工写编译指令,那么就用得着了。如果你使用vs开发环境,vs会自动产生.net调用COM组件的dll代码。
      

  8.   


    所谓“封装之后的dll”只是调用组件的几条代码,并不包含ocx。它要去你的机器注册表上找注册的ocx组件。
      

  9.   

    只有开学了回去找安装了SDK的机器去测试下了,手工注册好像不行。