vc调用delphi动态链接库问题!!!!!!!!!!!!!1 ( 积分: 100 )

  • 主题发起人 own_delphi
  • 开始时间
O

own_delphi

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi的dll中函数原形.
function show(str1:pChar;var str2:pChar):integer;StdCall;
VC中调用申明:
typedef int (PASCAL GetPennis)(CString , char * );
定义变量取返回值:
char * c=new char[100];
CString s;
s.Format("%s",c);
MessageBox(s);
delphi的dll调用成功!
但是在取字符串c时是乱码,不知道是怎么回事?请高手解决!
 
delphi的dll中函数原形.
function show(str1:pChar;var str2:pChar):integer;StdCall;
VC中调用申明:
typedef int (PASCAL GetPennis)(CString , char * );
定义变量取返回值:
char * c=new char[100];
CString s;
s.Format("%s",c);
MessageBox(s);
delphi的dll调用成功!
但是在取字符串c时是乱码,不知道是怎么回事?请高手解决!
 
看看这里面的讨论????
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1816765
谁能给个 VC 调用 Delphi 开发的DLL 的例子
 
1.我能够正常调用delphi的dll,
2.错误是返回值的问题,使乱码
3.谢谢各位关注
 
VC中调用申明:
typedef int (WINAPI GetPennis)(char * , char * );
 
也已经试过了[:(]
 
我的返回值int值是正常的,在delphi中申明的var 值作为引用返回不正常,乱码!
 
你的dll中是如何给str2赋值的?vc中是如何调用的,最关键的代码没有贴出
 
自己搞定了:
应定义为
typedef int (PASCAL GetPennis)(CString , char *&
);
才会有值
 
对于Delphi:
若你没有参数传递到被调用的DLL,则不应发生你所说的访问错误,若你使用了参数
,则你应保证主程序与被调用的DLL中均使用STDCALL或均不使用STDCALL。
对于VC++:
你应保证在DELPHI的DLL中使用STDCALL,然后你可在VC的主程序中写如下代码,
调用DLL中的指定过程。这里有一简单的例子,演示如何调用由DELPHI生成的DB_DLL
中的ShowNullFormModal过程,至于有参数时怎么调用,我就不说了,你既然使用
VC++,应该对此可举一反三的:
顺便说一下,我不明白你为什么要使用静态调用,根本没什么好处。
{
HINSTANCE h0;
FARPROC f0;
h0=LoadLibrary("e://delphi3//db_dll.dll");
if (h0!=0)
{
f0=GetProcAddress(h0,"ShowNullFormModal");
(*f0)();
//调用之
}
FreeLibrary(HMODULE(h0));
}
 
不用pascal,另外不用cstring,用char *
typedef int (GetPennis)(char * , char * );
 
这个不用翻译,代码都是你自己的,应该很清楚,var PChar,这本身是一个引用的指针,另外明明是stdcall,怎么会翻译成pascal?
另外.用CString似乎不是很合适吧.
typedef int (__stdcall *GetPennis)(LPCHAR , LPCHAR&/*[LPCHAR*在WINAPI的声明中一般如此较多]*/);
 
用数组
typedef int (PASCAL GetPennis)(CString , char[] );
 
VC中的映射方法参数应该这样声明:(char * lpBuff, char ** lppVal)
调用时:
char c[100];
char * pc = NULL;
Func(c, &lc);
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部