hur.cn - 华软网

 热门搜索

pb调用vc 写 dll的问题1

  作者:未知    来源:网络    更新时间:2018/11/9
win32 的 规范dll 

vc中定义以下,
extern "C" __declspec(dllexport)  int Msgbox(char *abc)
{

// LPCTSTR  a = abc;
int result=1;
// MessageBox(NULL,"取得ClipBoardz中的图像,存为jpg","DLL说明",MB_OK);

//MessageBox(NULL,a,"DLL说明",MB_OK);


   return result;
}


在pb的定义以下

Function int Msgbox(ref string ab) library "test.dd"

然则调用的时候出现以下毛病
application terinated

error:specified argument type differs from required argument type at runtime in dll function msgbo.
(invalid stact pointer on return  from function call) at line 9 in clicked event of object cb_a of main


然则如果我把vc中定义改成这样就能够了。
  

extern "C" __declspec(dllexport)  int Msgbox()
{

// LPCTSTR  a = abc;
int result=1;
// MessageBox(NULL,"取得ClipBoardz中的图像,存为jpg","DLL说明",MB_OK);

//MessageBox(NULL,a,"DLL说明",MB_OK);


   return result;
}



在pb的定义改成这样

Function int Msgbox() library "test.dd"

就能够了。为什么会这样呢?我要传个参数给pb该怎么办呢?
------华软网友回答------
我明白了,要用__stdcall 声明一下,,函数的定义改成这样,

extern "C" __declspec(dllexport) int __stdcall Msgbox(int a)

就能够了,然则这样的话,你获得的毛病就函数名 就是 _Msgbox@4

所以咱们要声明一个.def的资料 ,
包括 以下语句
export Msgbox = _Msgbox@4

完成!
pb 调用dll 一定要声明 _stdcall 否则没有措施传值。

好了,谁来跟个帖,我好结帖!


------华软网友回复------
我来
------华软网友回复------
楼主我也遇到你这样的问题,然则好象行不通啊,对于String 类型
------华软网友回复------
成功了.谢谢楼主.哈哈
------华软网友回复------
string类型是不行的,只可用字符数组,由于VC中的CString是MFC类。
------华软网友回复------
主要是由于vc生成dll时生所的function name表有关。需要定义def资料,由于如果大概义的话,生所的dll函数名上编译器会自加上_ 和@等特殊符号,要注意如果所写的dll还要由vc来调用的话,同时还要在def资料中定义 函数名的顺序才行。比如说: GetMsg @1 每一个名称都要占一行。1就是顺序号。
------华软网友回复------
正好要用.      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。