关于Delphi引用VC封装的Dll的问题!(200分)

  • 主题发起人 主题发起人 hikkk
  • 开始时间 开始时间
H

hikkk

Unregistered / Unconfirmed
GUEST, unregistred user!
以下是调用deadll.dll的C语言代码,对应Delphi中如何引用这个DLL?主要是Delphi如何对应C的参数类型问题,请提供详细代码?!

#include <stdio.h>
#include <string.h>
#include "standard.h"

#include "Windows.h"

typedef void (__stdcall*Bank_GetMac)
(bptr Mac_SourceData, word SouceData_Len,bptr mackey ,bptr random ,bptr mac);

void main()
{
HMODULE hModule

byte data[9],key[9];
byte macsouce[500];
byte mac[9];
int a;
int i;

Bank_GetMac bg;
hModule = LoadLibrary("deadll.dll");
bg = (Bank_GetMac)GetProcAddress(hModule, "Bank_GetMac");

strcpy((char*)data, "00000000");
strcpy((char*)key, "11111111");
memset(macsouce,0,sizeof(macsouce));

printf("encrypt_result=");
for (i=0;i<8
i++)
printf("%02x",(bptr)*&amp;data);
printf("/n");


strcpy((char*)data, "00000000");
memcpy(macsouce,"11234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz+-*&amp;",257);

bg(macsouce, 257, key ,data, mac);
a=sizeof(word);
printf("mac_result=");
for (i=0;i<8
i++)
printf("%02x",(bptr)*&amp;mac);
printf("/n");


printf("decrypt_result=");
for (i=0;i<8
i++)
printf("%02x",(bptr)*&amp;data);
printf("/n");
}

!!!!!!以下是Standard.h的代码!!!!!!!

#ifndef _STANDARD_H_
#define _STANDARD_H_

typedef unsigned char byte;
typedef byte* bptr;
typedef char* cptr;
typedef unsigned short word;
typedef word* wptr;
typedef unsigned long dword;
typedef dword* dwptr;

#define bool int
#define Boolean bool
#define true 1
#define false 0

#endif
 
请各位dx帮帮忙!
 
没人吗?
 
在delphi里面这么写,写一个头文件,然后其他程序就可以应用了:
unit unit1

interface

function Bank_GetMac(Mac_SourceData:Pbyte;SouceData_Len;word;mackey:Pbyte;random;Pbyte,mac:Pbyte):Pbyte;stdcall;

implement
function Bank_GetMac(Mac_SourceData:Pbyte;SouceData_Len;word;mackey:Pbyte;random;Pbyte,mac:Pbyte):Pbyte;stdcall
external 'deadll.dll' name 'Bank_GetMac'

end.
 
呵呵
其实这个动态库的调用模式都是一样的,
写法也是类似的
你根本不用考虑它是用什么方式写的
 
现在已经可以正常调用,没有出错,可惜调用后结果不正确:我用按钮作ShowMessage显示结果Mac,按下按钮第一次与第二次的结果不一样,之后的就全部一样,即只有第一次的结果是特殊的,以后的结果都相同,为什么??是否与指针有关??
 
dll是微软规定的规范,只要按一定格式调用就是了

你的问题是dll本身的问题吧?

 
没有人清楚点的吗?为什么结果会不一样???
 
有兩個可能, 比較可能是那個deadll.dll文件的問題, 它是按一定規則來計算mac的, 第二次你傳進去的串, 已經不滿足計算的條件了, 所以, 就總是返回一樣!
我看過上面的delphi聲明, 應該是沒問題的了!

還有可能是你的delphi代碼不對, 但可能性比較小!
 
to Aiirii:
为什么我第二次传进去的串不满足计算条件?是否指针变了??
另外,又如何解释第二次以后的结果都一样呢??
 
我的意思是說, 可能會判斷, 如, 是不是ascii碼, 是則轉換, 不是則忽略之類的!
 
多人接受答案了。
 
后退
顶部