• 全部
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

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)报写错误,不知道是什么原因,请教各位老大。
...全文
9 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
急啊,麻烦各位老大啦!

谢谢!不胜感激!
回复
相关推荐
发帖
Delphi
创建于2007-08-02

4876

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2002-10-05 04:57
社区公告
暂无公告