注册 登录
编程论坛 VC++/MFC

调用动态链接库dll的问题

jidipiaoyu 发布于 2011-08-29 17:15, 569 次点击
typedef  bool(__stdcall CHANGE)(char *,char *,BOOL,int);

void BmpToJpgDlg()
{
HINSTANCE   hInst   =   ::LoadLibrary( L"JpgVSbmp.dll ");
if(   hInst   ==   NULL   )
{
return;
}
CHANGE*   pFunc =   (CHANGE   *)::GetProcAddress(hInst, "BmpToJpg ");
CString strBMP=_T("C:\\tmp.bmp"),strJPG=_T("C:\\tmp.jpg");
pFunc(strBMP.GetBuffer(50),strJPG.GetBuffer(50),TRUE,75);
strBMP.ReleaseBuffer();
strJPG.ReleaseBuffer();
::FreeLibrary(hInst);
}
这是我所要调用的函数定义
C++定义为:BOOL BmpToJpg(LPCSTR lpBmpFileNameForIn, LPCSTR lpJpgFileNameForOut,BOOL bColor, int nQuality)
PB声明:Function Boolean BmpToJpg(string lpBmpFileNameForIn,string lpJpgFileNameForOut,Boolean bColor, int nQuality) LIBRARY "jpgvsbmp.dll"

这样会pFunc的参数会报错,求大侠告诉我该怎样传参数进去?多谢多谢
6 回复
#2
hahayezhe2011-08-29 17:28
HINSTANCE   hInst   =   ::LoadLibrary( L"JpgVSbmp.dll ");
if(   hInst   ==   NULL   )
{
return;
}
CHANGE*   pFunc =   (CHANGE   *)::GetProcAddress(hInst, "BmpToJpg ");
你的程序是A码还是U码啊??? 路径正确么
LoadLibrary 确定是LoadLibraryw???? "BmpToJpg ");函数名前确定不用L

#3
hahayezhe2011-08-29 17:30
还有参数定义不一样的
一个类的对象 值传递 一个字符指针
为啥要用string 不用LPCSTR
#4
jidipiaoyu2011-08-29 18:42
回复 3楼 hahayezhe
因为我对C++确实不熟,不懂的地方很多,请指教下,
已知了一个dll,JpgVSbmp.dll中共有两个函数,其中一个函数是
C++定义为:BOOL BmpToJpg(LPCSTR lpBmpFileNameForIn, LPCSTR lpJpgFileNameForOut,BOOL bColor, int nQuality)
是将BMP格式的图片转换为JPG格式,第一个参数是BMP的文件地址,第二个参数是JPG的文件地址,我该怎样做才能引用此函数?
#5
hahayezhe2011-08-29 22:52
哈哈 你自己的 为啥不用lib库哦  静态库 引入库都可以啊

你可以看看 核心编程 动态库编程这章节 有详细的说明

动态加载动态库也可以的,但是你的自定义函数参数类型得匹配啊

不就是字符指针么
#6
hahayezhe2011-08-29 22:54
将LPCSTR 之类的转换了解明天了 就没什么 就是一个TCHAR*

你可以跳进去看看其相关的定义宏(右键显示定义)
#7
jidipiaoyu2011-08-30 10:23
回复 6楼 hahayezhe
谢谢,已经解决了。。。原先是想将BMP文件转换为JPG文件,整了老半天,结果发现只需要利用CImage类就可以了。。郁闷得1B
1