delphi中调用vc dll的问题?

joinrry 2002-10-05 04:57:18
代码如下:

tgettime = function ( var sSourceFile:array of char;
var sDestinationFile:array of char;
IsOverCast:boolean;
usInputFlowRate:byte;
usOutputPCMLAW:byte;
var sErrorCodeBuffer:array of char;
bReserved:byte):boolean;

var
errorbuf,SourceFile,DestinationFile:array[0..511] of char;
other:byte;
libhandle :integer;
begin
SourceFile := 'D:\1.voc';
DestinationFile := 'd:\12.wav';
LibHandle:=LoadLibrary('adpcmdll.DLL');
if LibHandle=0 then
begin
Application.MessageBox('无此文件','警告',mb_ok+64);
exit;
end;
try
@Pcm2Wav:=GetProcAddress(LibHandle,'HU_AdpcmToWav');
if not(@Pcm2Wav=nil) then
Pcm2Wav(sourcefile,destinationfile,true,24,1,errorbuf,other);
finally
FreeLibrary(LibHandle);
end;

end;


调试时到Pcm2Wav(sourcefile,destinationfile,true,24,1,errorbuf,other)报写错误,不知道是什么原因,请教各位老大。
...全文
39 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tonylk 2002-10-05
  • 打赏
  • 举报
回复
刚才试了一下,用var sSourceFile:array of char这样的声明可以的,只不过这样就必须用变量做为参数将字符串信息传给函数了,所以我还是建议用pchar,

你最好检查一下vc的dll导出函数是否是c的调用方式,如果是这样的话你的delphi中的声明最后必须加上"cdecl;",否则堆栈的压入方式有区别,程序更定不会对的,如:
tgettime = function ( var sSourceFile:array of char;
var sDestinationFile:array of char;
IsOverCast:boolean;
usInputFlowRate:byte;
usOutputPCMLAW:byte;
var sErrorCodeBuffer:array of char;
bReserved:byte):boolean;cdecl;

另外,楼主是否在做电话卡的程序阿,想请问使用的是哪家的电话卡,性能参数如何。。。
tonylk 2002-10-05
  • 打赏
  • 举报
回复
tgettime = function ( var sSourceFile:array of char;
var sDestinationFile:array of char;
IsOverCast:boolean;
usInputFlowRate:byte;
usOutputPCMLAW:byte;
var sErrorCodeBuffer:array of char;
bReserved:byte):boolean;
在vc中的原型是什么呢?
第一个参数,如果是char*型的,应该用pchar,我不知道用var sSourceFile:array of char;是否正确。
joinrry 2002-10-05
  • 打赏
  • 举报
回复
eaccessviolation异常,写错误!在线等待!
Drate 2002-10-05
  • 打赏
  • 举报
回复
不知道你报的错误是什么错呢?

joinrry 2002-10-05
  • 打赏
  • 举报
回复
急啊,麻烦各位老大啦!

谢谢!不胜感激!

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧