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) Create的窗口,当它显示的时候,如何阻止其他窗口的事件被触发 VC中怎样定义一个全局变量,让它的值为控件ID 程序关闭后任务栏上的矩形部分不消失,怎么办? 求一位高手帮我写个"截取对话框播放的视频的图片"的函数 一天中上机时间和看书时间的分配问题 怎么在VS2005中添加WM_LBUTTONDOWN等消息处理函数? 文件路径设定 求vc6读写xml文件的例子 新手,关于SDK的简单问题 谁手头上有《Windows 核心编程》书的配套源码,或在哪能找到? 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)