DLL里面是一个处理图像的函数,使用了gdiplus.h里面的Image类,参数是一个对Image对象的引用。当用C#调用这个函数,使用的是System.System.Drawing.Image对象的引用:MirrorDIB( ref theimage );出现这个信息:
无法封送 parameter #1:该类型的类型定义没有布局信息。不知道这是什么原因?

解决方案 »

  1.   

    哭~为什么没人理呢???
    C#调用非托管DLL,到底能不能传递对象作为参数??
      

  2.   

    gdiplus.h里面的Image类 != System.System.Drawing.Image
      

  3.   

    非托管DLL是如何写,用的是什么环境
      

  4.   

    这两个Image类不一样的话该怎么办呢?DLL是用C++来写的,没有用MFC。
      

  5.   

    to DLL是用C++来写的,没有用MFC函数如何声明的,在dll中。
      

  6.   

    整个DLL的内容:
    #ifndef DLL_FILE
    #define DLL_FILE
    #endif
    //#define   ULONG_PTR   DWORD#include <windows.h>
    #include <gdiplus.h>
    #include <Gdiplusimaging.h>  
    #include <Gdiplusimagecodec.h>  
    using namespace Gdiplus;#ifdef DLL_FILE
    extern "C"  bool __declspec(dllexport) MirrorDIB(Image *curImage);
    #else
    extern "C"  bool __declspec(dllimport) MirrorDIB(Image *curImage);
    #endifbool MirrorDIB(Image *curImage)
    {
    curImage.RotateFlip(Rotate90FlipNone);
    return true;
    }
      

  7.   

    如果只是完成如上的功能,为什么还用掉dll,直接c#就可以完成
      

  8.   

    那直接用vc.net进行开发不就行了,如果想在c#中用,那么用vc.net做成类库不是更简单,做什么标准的dll。
      

  9.   

    c#直接引用vc.net的项目就可以了
      

  10.   

    你用vc.net做成类库,那么在c#中进行引用即可当作自己写的类直接调用。
      

  11.   

    to 你说的是不是用托管C++来做类库是啊
      

  12.   

    你底层都是vc.net来实现,即在dll中实现的方法也可用于类库中,只不过输出的方式不同而已。
      

  13.   

    感觉如果全部用托管代码的话,速度不会很好吧。。而且我不会用MFC。。不然就用MFC来做了你能不能给出个主意呢?
      

  14.   

    to 这个工程现在只是一个图像处理软件那么建议你用vc.net来直接写速度要好一些。
      

  15.   

    to 而且我不会用MFC。。不然就用MFC来做了用vc.net做成托管的winapp,效率要比c#强很多。
      

  16.   

    to 我还没有做过托管的C++,不知道它的效率和非托管的C++相比能相差多少呢?实现相同功能,调用底层基本没多大区别的话,还是非托管的要快一些,
    但是如果无法用非托管的c++来编写全部代码的话,就像用非托管的c++做成dll供c#调用一样,反而不如用托管的效率高,而且省去了很多麻烦。