pb调用vc写的dll 我需要用vc写一个dll,这个dll需要接受pb传进来的一个字符串,处理后,在传出一个字符串,小弟弄了很长时间,始终没有结果,请高手赐教,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 PB没有用过但是应该注意DLL中的调用约定,因为这个涉及到分配的内存由谁释放。应该使用__stdcall 主要是我不知道传入和传出应该用什么类型的,我用的vc++ int oo(char *a,char b)a是传入的字符串,b是传出的字符串,我不知道这样写对不对阿。 需要注意函数调用约定,一般用__stdcall还要注意不同语言之间的类型转换 “我调用的时候传入两个字符串,提示类型不对啊”你后面那个char b 不是字符数组,只是个字符。不能传字符串吧!如楼上位高手所说,一定要注意用__stdcall。近来我一直在写VC的DLL用PB调用,愿意和你讨论一下! LPVOID PASCAL getmtime(LPVOID pFileName){ // char *a=pFileName; CString str; char *a,*buffer=new char[256]; a=(char *)pFileName; //AfxMessageBox(a); if(file.Open(a,CFile::modeRead)) file.GetStatus(a,status); else AfxMessageBox("error can't open file"); str.Format("%02d年 %02d月 %02d日,%02d:%02d:%02d",status.m_mtime.GetYear(),status.m_mtime.GetMonth(),status.m_mtime.GetDay(),status.m_mtime.GetHour(),status.m_mtime.GetMinute(),status.m_mtime.GetSecond()); for(int i=0;i<str.GetLength();i++) {buffer[i]=str.GetAt(i); } buffer[i]='\0'; //AfxMessageBox(buffer); file.Close(); return buffer; } 按这种形式吧,肯定没问题,传出也用LPVOID 要是传入和传出字符串,PB的声明里面要用ref.在VC中传出一个字符串:extern "C" BOOL PASCAL EXPORT GetSTR(LPTSTR szOutStr, int nLen);PB里面首先声明为:boolean GetSTR(ref string szOutStr, int nLen) Library "example.dll"调用的时候要给你的字符串变量先分配一块内存,要不然程序会不稳定.如: string oStr oStr = space(500) GetSTR(ref oStr, 500) Exclusive OR是什么意思,如何用程序来表示 虚心请教 怎么建立建立一个基于对话框的MFC应用程序? 寻找开发电梯者! 用vc开发b/s模式要注意什么内容 如何设置TabCtr控件标签处的颜色? 知道了MAC地址了以后怎么查出机器的ip.....? VC++.Net中创建DLL的问题 翠花,上酸菜——累了,咱和你聊聊这个叫做“软件”的东西 怎样在用户拖动拆分条改变FORMVIEW大小时让FORMVIEW里的控件随之改变相应的位置? VC+ADO处理VFP6.0问题,如何“彻底”删除表中记录? 散分。。。。。。
还要注意不同语言之间的类型转换
{ // char *a=pFileName;
CString str;
char *a,*buffer=new char[256];
a=(char *)pFileName;
//AfxMessageBox(a);
if(file.Open(a,CFile::modeRead))
file.GetStatus(a,status);
else AfxMessageBox("error can't open file");
str.Format("%02d年 %02d月 %02d日,%02d:%02d:%02d",status.m_mtime.GetYear(),status.m_mtime.GetMonth(),status.m_mtime.GetDay(),status.m_mtime.GetHour(),status.m_mtime.GetMinute(),status.m_mtime.GetSecond());
for(int i=0;i<str.GetLength();i++)
{buffer[i]=str.GetAt(i);
}
buffer[i]='\0';
//AfxMessageBox(buffer);
file.Close();
return buffer;
}
按这种形式吧,肯定没问题,传出也用LPVOID
boolean GetSTR(ref string szOutStr, int nLen) Library "example.dll"调用的时候要给你的字符串变量先分配一块内存,要不然程序会不稳定.
如:
string oStr
oStr = space(500)
GetSTR(ref oStr, 500)