调用dll,返回值为乱码!不知道如何解决? ( 积分: 50 )

  • 主题发起人 主题发起人 ddzhouqian
  • 开始时间 开始时间
D

ddzhouqian

Unregistered / Unconfirmed
GUEST, unregistred user!
如题:在delphi中调用vc写的dll,通过回调函数,获取返回信息,但该信息却为乱码。<br>我在vc项目调试了下返回值正常,不知道是什么原因?是不是环境设置的问题啊?<br>部分代码如下:请各位帮帮忙<br>function&nbsp;fOsdCallBack(OsdHandle:Pointer;pBuf:PChar;dwBufLen:LongInt;nUser:Pointer):Bool;<br>begin<br>&nbsp;&nbsp;showmessage(strpas(pBuf));//此返回的信息为乱码:'U嬱伳x
 
在函数声明之后加stdcall试试.
 
这是需要定义的回调函数,不需要加的<br>调用一共两句代码<br>这是函数声明:<br>//<br>function&nbsp;VIDEO_SetValueGetCallBack(fOsdCallBack:TOsdCallBack;Context:Pointer):LongInt;stdcall;<br>&nbsp;&nbsp;function&nbsp;VIDEO_GetValueConfig(lUserID:LongInt;dwCommand:LongInt;lChannel:LongInt;lpOutBuffer:Pointer;dwOutBufferSize:LongInt;lpBytesReturned:PLongInt):LongInt;stdcall;<br>//<br>procedure&nbsp;TForm1.Button5Click(Sender:&nbsp;TObject);<br>BEGIN<br>&nbsp;&nbsp;VIDEO_SetValueGetCallBack(fOsdCallBack,Pointer(Form1));<br>&nbsp;&nbsp;VIDEO_GetValueConfig(m_lServerID,CMD_1,0,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@m_hOsdHandle,0,@lpBytesReturned);<br>END;<br>function&nbsp;fOsdCallBack(OsdHandle:Pointer;pBuf:PChar;dwBufLen:LongInt;nUser:Pointer):Bool;//这是回调函数获取信息<br>begin<br>&nbsp;&nbsp;showmessage(strpas(pBuf));//此返回的信息为乱码:'U嬱伳x
 
其实就是设置个回调,然后调用取信息的函数来激活回调函数,最后在回调函数里取需要的值!<br>我在VC里用的代码调用过了,也是这几步,很正常的,取的值很没问题。<br>不知道是啥原因。<br>我觉得好像是unicode这方面的问题?<br>只是感觉确不知道怎么去尝试处理了,郁闷啊!
 
关注!。。。。。。。。。。
 
我顶!等待各位的帮忙!
 
我觉得应该是Pascal的通用表示符的问题;具体是什么,我不知道。
 
以下是vc中的函数声明:<br>#define&nbsp;DLLEXPORT_API&nbsp;&nbsp;extern&nbsp;&quot;C&quot;__declspec(dllexport)&nbsp;<br>DLLEXPORT_API&nbsp;LONG&nbsp;__stdcall&nbsp;VIDEO_SetValueGetCallBack(BOOL(CALLBACK*&nbsp;fOsdCallBack)(LPVOID&nbsp;OsdHandle,char*&nbsp;pBuf,&nbsp;DWORD&nbsp;dwBufLen,void&nbsp;*Context),&nbsp;void&nbsp;*Context);<br>DLLEXPORT_API&nbsp;LONG&nbsp;__stdcall&nbsp;VIDEO_GetValueConfig(LONG&nbsp;lUserID,DWORD&nbsp;dwCommand,&nbsp;DWORD&nbsp;lChannel,LPVOID&nbsp;lpOutBuffer,&nbsp;DWORD&nbsp;dwOutBufferSize,&nbsp;DWORD*&nbsp;&nbsp;lpBytesReturned);<br>//调用<br>void&nbsp;Cmfc1Dlg::OnBnClickedButton2()<br>{<br>&nbsp;&nbsp;//&nbsp;TODO:&nbsp;在此添加控件通知处理程序代码<br>&nbsp;&nbsp;&nbsp;DWORD&nbsp;lpBytesReturned&nbsp;=&nbsp;0;<br>&nbsp;&nbsp;&nbsp;VIDEO_SetValueGetCallBack(fOsdCallBack,(void*)this);<br>&nbsp;&nbsp;&nbsp;VIDEO_GetValueConfig(m_lServerID,&nbsp;CMD_1,&nbsp;0,&amp;m_hOsdHandle,0,&amp;lpBytesReturned);<br>}<br>//回调<br>BOOL&nbsp;__stdcall&nbsp;fOsdCallBack(void&nbsp;*&nbsp;OsdHandle,&nbsp;char*&nbsp;pBuf,&nbsp;DWORD&nbsp;dwBufLen,&nbsp;void&nbsp;*nUser)<br>{<br><br>}
 
to&nbsp;:listhano<br>什么是通用表示符?
 
问题已经解决,请各位给与些人气散分,呵呵
 
问题出到哪了,也说明一下!!
 
就是stdcall
 
唉,我提醒了stdcall的,为何不给我加分?
 
后退
顶部