C#调用非托管C++的DLL时出现的问题 DLL里面是一个处理图像的函数,使用了gdiplus.h里面的Image类,参数是一个对Image对象的引用。当用C#调用这个函数,使用的是System.System.Drawing.Image对象的引用:MirrorDIB( ref theimage );出现这个信息:无法封送 parameter #1:该类型的类型定义没有布局信息。不知道这是什么原因? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 哭~为什么没人理呢???C#调用非托管DLL,到底能不能传递对象作为参数?? gdiplus.h里面的Image类 != System.System.Drawing.Image 非托管DLL是如何写,用的是什么环境 这两个Image类不一样的话该怎么办呢?DLL是用C++来写的,没有用MFC。 to DLL是用C++来写的,没有用MFC函数如何声明的,在dll中。 整个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_FILEextern "C" bool __declspec(dllexport) MirrorDIB(Image *curImage);#elseextern "C" bool __declspec(dllimport) MirrorDIB(Image *curImage);#endifbool MirrorDIB(Image *curImage){ curImage.RotateFlip(Rotate90FlipNone); return true;} 如果只是完成如上的功能,为什么还用掉dll,直接c#就可以完成 那直接用vc.net进行开发不就行了,如果想在c#中用,那么用vc.net做成类库不是更简单,做什么标准的dll。 c#直接引用vc.net的项目就可以了 你用vc.net做成类库,那么在c#中进行引用即可当作自己写的类直接调用。 to 你说的是不是用托管C++来做类库是啊 你底层都是vc.net来实现,即在dll中实现的方法也可用于类库中,只不过输出的方式不同而已。 感觉如果全部用托管代码的话,速度不会很好吧。。而且我不会用MFC。。不然就用MFC来做了你能不能给出个主意呢? to 这个工程现在只是一个图像处理软件那么建议你用vc.net来直接写速度要好一些。 to 而且我不会用MFC。。不然就用MFC来做了用vc.net做成托管的winapp,效率要比c#强很多。 to 我还没有做过托管的C++,不知道它的效率和非托管的C++相比能相差多少呢?实现相同功能,调用底层基本没多大区别的话,还是非托管的要快一些,但是如果无法用非托管的c++来编写全部代码的话,就像用非托管的c++做成dll供c#调用一样,反而不如用托管的效率高,而且省去了很多麻烦。 如何在应用程序里访问远程服务器 关于网站建设 关于HttpWebRequest抓取页面的奇怪问题 我晕,registry.getvalue()读取整数溢出了咋个办? 本机数据库与服务器数据库之间传递数据如何实现? 请问VC6++里的控件MSComm,则么在.Net下的C#实现 com通信问题 为什么在HTML写了几个代码,当点击回到设计时它就出错了? 关于String.Replace()的使用问题? 求:好的 FAQ,希望大侠们帮忙 关于托盘图标点击的问题,100分 ServerVersion属性的问题!!!
C#调用非托管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;
}
但是如果无法用非托管的c++来编写全部代码的话,就像用非托管的c++做成dll供c#调用一样,反而不如用托管的效率高,而且省去了很多麻烦。