很简单的问题:VC写的DLL,用Delphi调,怎么出错呢?? (5分)

  • 主题发起人 主题发起人 asphunter
  • 开始时间 开始时间
A

asphunter

Unregistered / Unconfirmed
GUEST, unregistred user!
VC写的DLL中的方法:<br>char* myStrCopy(char* str1,char* str2)<br>{<br> char* tmp="";<br> strcpy(tmp,str1);<br><br> return tmp;<br>}<br><br>Delphi调用方法:<br>function myStrCopy(str1:pchar;str2:pchar):pchar;stdcall;external 'testDLL.dll' name 'myStrCopy';<br><br>procedure TForm1.Button2Click(Sender: TObject);<br>var<br>&nbsp; a,b,c:pchar;<br>begin<br>&nbsp; a:='abc';<br>&nbsp; b:='123';<br>&nbsp; c:=myStrCopy(a,b);//执行到此步时出错,提示说:在testDLL.dll中的无效访问地址<br>&nbsp; showmessage(c);<br>end;
 
char* myStrCopy(char* str1,char* str2)<br>{<br>&nbsp; static char* tmp="";<br>&nbsp; strcpy(tmp,str1);<br>&nbsp; return tmp;<br>}<br>
 
vc中也必须用WINAPI修饰符声明。
 
不错,这个WINAPI修饰,很多书都不讲
 
char* &nbsp;_stdcall EXPORT myStrCopy(char* str1,char* str2)<br>{<br>}<br><br>另外对于stdcall的方式,还要修改VC工程目录中的.def文件<br>EXPORTS<br>myStrCopy @1; Explicit exports can go here<br>
 
死水,你的方法还是报错。<br>我将VC中的方法改成下面的就正确了<br>char* myStrCopy(char* str1,char* str2)<br>{<br>&nbsp; &nbsp; char* tmp="abc";<br>&nbsp; &nbsp; //strcpy(tmp,str1);<br><br>&nbsp; &nbsp; return tmp;<br>}<br>好象是在调用VC里的strcpy函数时出的错,怎么解决呀???<br><br><br>
 
你先把VC的写成exe的,没有错误时再改成dll形式
 
可能要在字符串后面增加一个#0,我以前就是这样解决的,不过是c写的dll
 
procedure TForm1.Button2Click(Sender: TObject);<br>var<br>&nbsp; a,b,c:pchar;<br>begin<br>&nbsp; a:=stralloc(50);;//声明为pchar类型的变量要先分配内存空间<br>&nbsp; b:=stralloc(50);<br>&nbsp; a:='abc'<br>&nbsp; b:='123';<br>&nbsp; c:=myStrCopy(a,b);//执行到此步时出错,提示说:在testDLL.dll中的无效访问地址<br>&nbsp; showmessage(c);<br>end;
 
char* myStrCopy(char* str1,char* str2)<br>{<br>&nbsp; char* tmp;<br>&nbsp; tmp=str1;<br>&nbsp; return tmp;<br>}
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
908
import
I
I
回复
0
查看
665
import
I
I
回复
0
查看
899
import
I
后退
顶部