C# uses different programming model, find a C# book and read about it

解决方案 »

  1.   

    to fa2002(叮当) :
    如果整个软件都是自己的技术,还可以想想办法重些一遍,但是如果要用到第三方的一些库文件时,怎么办?如图形对象函数库等。
      

  2.   

    to fa2002(叮当) :
    如果整个软件都是自己的技术,还可以想想办法重些一遍,但是如果要用到第三方的一些库文件时,怎么办?如图形对象函数库、directX、OpenGL等。
      

  3.   

    用C++写的.h/.cpp文件编译的时候写成dll,如果是用 VC7写的话就可以直接使用(include class,等),如果是VC6,,那么就使用Framework的PInvoke
      

  4.   

    to JoeXu(Joe) :
    能否具体说说如何做?
    如果dll是vc6做的,使用framework的PInvoke会导入类的层次结构吗?
      

  5.   

    我曾经遇到过类似的问题,我的解决方法是,用VC将“以前c++的.lib库和.h头文件”编译成COM,再在C#中使用,结果是功能上大体都可以实现,但是速度上稍微有些慢。
      

  6.   

    to zhujiang_1977(朱江) :
    如何编译成com?如果类层次比较多时,如何保留类之间的继承关系和函数重载关系?
      

  7.   

    COM
    不是重新编译一下就可以的啊, COM是不管内部的处理机制的, 
      

  8.   

    我写过2个VC的接口连接程序,没COM什么事,我建议你到MSDN中寻找"封送处理"
    看看MS的建议方法再说。
      

  9.   

    C#要想使用C++中的程序,请将C/C++程序编译成dll。
    然后,再由C#引用dll中的函数。若想要C#继承C++中的类,绝对不行。当然,你可以在c#写一个包装类(Wrapper),类中引用dll函数。------------------------------
    C# 和 C/C++ 是完全不同的两种语言,就象VB 和 c++一样。你如何在VB中引用C++的程序,C#中也如何。
    这种情况叫混合语言编程。
      

  10.   

    to all:
    那,使用vc.net 可以做到上述要求吗?
      

  11.   

    vc.net可以做到源码级重用,但不一定能做到继承关系。特别是模板,完全不能。
      

  12.   

    to  Muf(沐枫) :
    你说的“但不一定能做到继承关系。特别是模板,完全不能”是什么意思?能够详细说说么?
      

  13.   


    你的问题是个很大的问题,牵涉到代码的重用、COM DLL的重用、Win32 API DLL的重用,等等。只能给你一些建议:
    1)代码级重用是做不到的。C++的代码不能直接用在C#中。
    2)你提到了很多现有的类库,例如OpenGL、DirectX等等。这些类库,都是以DLL形式出现的,要么是Win32 API DLL,要么是COM DLL。无论是哪一种,都可以在C#里面通过Interoperation重用。网上有很多DLLImport和COM Interop的例子和文档。
    3)如果需要重用.lib和.h,就需要区别情况对待。如果.lib是纯粹的API函数库,那可以把.lib和.h编译成.dll,就可以在C#里面通过DLLImport来重用。如果.lib和.h里面有自定的类,就比较麻烦,最好是把源码抠出来(如果没有源码,就自己再在外面包一层自己的类),然后用COM的方法重新包装一下,再编译成DLL,这样就可以在C#里面用COM Interop来重用。unmanaged code是一个很大很大的话题,建议你慢慢体会慢慢钻研,前面zhujiang_1977, fa2002和 Muf给的建议都很有参考价值。只有对Win32 API DLL、COM以及.NET中的Interoperation都已经熟悉了,才能融会贯通的处理代码重用的问题。一口是吃不下大胖子的。
      

  14.   


    你的问题是个很大的问题,牵涉到代码的重用、COM DLL的重用、Win32 API DLL的重用,等等。只能给你一些建议:
    1)代码级重用是做不到的。C++的代码不能直接用在C#中。
    2)你提到了很多现有的类库,例如OpenGL、DirectX等等。这些类库,都是以DLL形式出现的,要么是Win32 API DLL,要么是COM DLL。无论是哪一种,都可以在C#里面通过Interoperation重用。网上有很多DLLImport和COM Interop的例子和文档。
    3)如果需要重用.lib和.h,就需要区别情况对待。如果.lib是纯粹的API函数库,那可以把.lib和.h编译成.dll,就可以在C#里面通过DLLImport来重用。如果.lib和.h里面有自定的类,就比较麻烦,最好是把源码抠出来(如果没有源码,就自己再在外面包一层自己的类),然后用COM的方法重新包装一下,再编译成DLL,这样就可以在C#里面用COM Interop来重用。unmanaged code是一个很大很大的话题,建议你慢慢体会慢慢钻研,前面zhujiang_1977, fa2002和 Muf给的建议都很有参考价值。只有对Win32 API DLL、COM以及.NET中的Interoperation都已经熟悉了,才能融会贯通的处理代码重用的问题。一口是吃不下大胖子的。
      

  15.   

    To: iwin() 
    不好说。
    请参考:VC++ 托管扩展规范 (MSDN)
      

  16.   

    就有这需求,也不敢这么用。我们对.net还不放心。实践证明,对.net还无法放心。
      

  17.   

    如果C#不可以使用.h库,那么MS提供的messenger API对于C#不就成了废物?