所以我想用Delphi语言制作的.dll文件的函数。
这是delphi的代码,
procedure Login(login,password:PChar); stdcall;
var
LoginPacket:tLoginPacket;
s:IP_bigstr;
q,w:integer;
pb:PByte;
begin
LogMessage('Login: '+login+' pwd: '+password);
fillchar(loginpacket,sizeof(loginpacket),0);
LoginPacket.code:=10;
LoginPacket.lr.version:=100;
LoginPacket.lr.protocol:=ProtocolVersion;
LoginPacket.lr.login:=login;
LoginPacket.lr.gameversion:=version;
s:=password;
EncryptPwd(s,@loginPacket.lr.pwd);
Loginpacket.lr.pwdhash:=PasswordHash(password);
LoginPacket.lr.gameID:=0;
LoginPacket.lr.regname:='noname';
LoginPacket.lr.cdkey:=0;
LoginPacket.lr.cshash:=0;
loginpacket.lr.sversion:='';
pb:=@loginpacket; inc(pb);
for q:=1 to sizeof(tloginpacket)-1 do begin
pb^:=pb^ xor ((q+10)*(q+10) div 5);
inc(pb);
end;
SendData(@loginpacket,sizeof(loginpacket));
SimpleRequest(21,1,0);
SimpleRequest(20,0,0);
end;这是我的C#(unity3d)尝试,
[DllImport ("ServerTool")]
private static extern void Login([MarshalAs(UnmanagedType.LPStr)]string id, [MarshalAs(UnmanagedType.LPStr)]string pass);
private static extern void Login(string id, string pass);
...
if(stage ==1){
Login("Test", "qwerty");
stage = 2;
}以上两种定义登录方法都失败了,
当运行这个部分(if(stage==1)...Login)时,unity崩溃并关闭。
因此,我认为C#的这种登录用法在与delphi dll通信时存在一些问题。
请帮帮忙。
提前感谢。
发布于 2012-08-06 16:25:08
也不要忘记C#中的调用约定:
[DllImport ("ServerTool.dll"), CallingConvention=CallingConvention.StdCall)]您可能还需要根据所使用的Delphi版本来指定CharSet。
请参阅http://msdn.microsoft.com/en-us/library/7b93s42f.aspx和http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.callingconvention.aspx
https://stackoverflow.com/questions/11824738
复制相似问题