在delphi7里,如何声明和调用C++写的DLL里的函数。

披着虎皮的石头 2013-06-15 12:39:19
有一个HMAC-SHA1.dll的文件,
里面有两个:
int HMAC_SHA1(BYTE *text, const int text_len, BYTE *key, const int key_len, BYTE *digest, const int digest_len);
int Base64Encode(BYTE *src, const int src_len, BYTE *dst, const int dst_len);

怎么在delphi里,声明和使用这两个函数。
测试数据有
text=GET&%2Fdeal%2FsellerSearchDealList.xhtml&accessToken%3Dad39b7dbd59b87cda827223c0e520d6f%26appOAuthID%3D700042973%26charset%3Dgbk%26format%3Dxml%26randomValue%3D40898%26sellerUin%3D1280863473%26timeStamp%3D1371222640062%26uin%3D1280863473%26zhongwen%3D%D6%D0%CE%C4
key=hdUMwmU4P5jQtHpC&
返回值,digest=tPJTxXC+OlgzL/RXPrS247VJIyE=
...全文
202 13 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fullhappy 2013-08-01
这个DLL你还有无,要不发我邮箱9951853@qq.com,谢谢。
  • 打赏
  • 举报
回复
随行的太阳 2013-06-16
  • 打赏
  • 举报
回复
Ansili 已经帮我用C写了一个dll,然后我在delphi7下,可以调用dll就可以了。
  • 打赏
  • 举报
回复
我去试下。谢谢。
  • 打赏
  • 举报
回复
sololie 2013-06-15
c里传参,byte* byte数组没区别
  • 打赏
  • 举报
回复
这样的话,前面的pbyte声明为byte数组更方便 pbyte是C里定义的,能否改为byte数组
  • 打赏
  • 举报
回复
sololie 2013-06-15
这样的话,前面的pbyte声明为byte数组更方便

const
  arr: array[0..3] of Byte = (65,66,67,0);
var
  str: String;
begin
  SetLength(str, Length(arr) +1);
  Move(arr,str[1],Length(arr));
  ShowMessage(str);     // 输出 'ABC'
end;
  • 打赏
  • 举报
回复
就是byte指针和长度,转变为字符串,解决C和Delphi之间的数据结构
  • 打赏
  • 举报
回复
这个函数的作用是通过输入密key钥、明文test,得到hmac-sha1算法的值, 返回值是 dst:PBYTE; const dst_len:integer 然后delphi中,要根据这两个转化为string型,怎么写?
  • 打赏
  • 举报
回复
sololie 2013-06-15
怎么根据dst:PBYTE、和dst_len:integer,得到string型值。 没看懂你问的啥意义。 参数是byte数组或byte*,跟string有啥关系啊。 重要的是,参数要输入什么,你得看该函数的说明文档,不然百搭。 前面的代码只是给你转换函数声明而已。
  • 打赏
  • 举报
回复
引用 1 楼 sololie 的回复:

function HMAC_SHA1(text:PBYTE; const text_len:integer; key:PBYTE; const key_len:integer;
	digest:PBYTE; const digest_len:integer):integer;

funciton Base64Enconde(src:PBYTE; cons src_len:integer; dst:PBYTE; const dst_len:integer)
	:Integer;


var
  text,key, digest:PBYTE;
  resVal: integer;
const 
   txt_len = 64; // 大小自己自己按需设定
   digest_len = 32;
   key_len = 16;
begin
    getmem(text, txt_len); 
    getmem(digest, diges_len);
    getmem(key, key_len);
    resVal := HMAC_SHA1(text, txt_len, key, key_len,digest, digest_len); 
    freemem(text);
    freemem(key);
    freemem(digest);
end;
  
怎么根据dst:PBYTE、和dst_len:integer,得到string型值。
  • 打赏
  • 举报
回复
sololie 2013-06-15
喝高了,省略了text,key, digest 这些的赋值过程,自己给它们赋值,并把长度一并传进HMAC_SHA1去就行了
  • 打赏
  • 举报
回复
sololie 2013-06-15

function HMAC_SHA1(text:PBYTE; const text_len:integer; key:PBYTE; const key_len:integer;
	digest:PBYTE; const digest_len:integer):integer;

funciton Base64Enconde(src:PBYTE; cons src_len:integer; dst:PBYTE; const dst_len:integer)
	:Integer;


var
  text,key, digest:PBYTE;
  resVal: integer;
const 
   txt_len = 64; // 大小自己自己按需设定
   digest_len = 32;
   key_len = 16;
begin
    getmem(text, txt_len); 
    getmem(digest, diges_len);
    getmem(key, key_len);
    resVal := HMAC_SHA1(text, txt_len, key, key_len,digest, digest_len); 
    freemem(text);
    freemem(key);
    freemem(digest);
end;
  
  • 打赏
  • 举报
回复
发帖
Delphi

5124

社区成员

Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
帖子事件
创建了帖子
2013-06-15 12:39
社区公告
暂无公告