API函数原型封装在一个DLL文件中
BOOL ValidateUser(LPBIOVALIDATEUSER_INFO lpValidateUserInfo );
typedef struct tagBVUI {
DWORD dwStructSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPTSTR lpstrUsername;
LPTSTR lpstrDomain;
DWORD dwAuthProvider;
DWORD dwDialogType;
LPCSTR lpstrTitle;
DWORD dwFlags;
DWORD dwExtendedResult;
LPARAM lCustData; LPBIOHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
} BIOVALIDATEUSER_INFO;
在VB中的的定义如下:Public Declare Function BioValidateUser _
Lib "xxx.dll" _
Alias "BioValidateUserA" _
(ByRef UserInfo As BIOVALIDATEUSER_INFOA) _
As LongPublic Type BIOVALIDATEUSER_INFOA
dwStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrUsername As String
lpstrDomain As String
dwAuthProvider As Long
dwDialogType As Long
lpstrTitle As String
dwFlags As Long
dwExtendedResult As Long
lCustData As Long
lpfnHook As Long
lpstrTemplateName As String
End Type
我在DELPHI中调用老提示说地址错误,拜托各位弟兄帮忙
BOOL ValidateUser(LPBIOVALIDATEUSER_INFO lpValidateUserInfo );
typedef struct tagBVUI {
DWORD dwStructSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPTSTR lpstrUsername;
LPTSTR lpstrDomain;
DWORD dwAuthProvider;
DWORD dwDialogType;
LPCSTR lpstrTitle;
DWORD dwFlags;
DWORD dwExtendedResult;
LPARAM lCustData; LPBIOHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
} BIOVALIDATEUSER_INFO;
在VB中的的定义如下:Public Declare Function BioValidateUser _
Lib "xxx.dll" _
Alias "BioValidateUserA" _
(ByRef UserInfo As BIOVALIDATEUSER_INFOA) _
As LongPublic Type BIOVALIDATEUSER_INFOA
dwStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrUsername As String
lpstrDomain As String
dwAuthProvider As Long
dwDialogType As Long
lpstrTitle As String
dwFlags As Long
dwExtendedResult As Long
lCustData As Long
lpfnHook As Long
lpstrTemplateName As String
End Type
我在DELPHI中调用老提示说地址错误,拜托各位弟兄帮忙
dwStructSize是指结构的SIZE,我用SIZEOF获得;
hwndOwner是指调用本函数的窗体句柄;可为0;
hInstance可为0
lpstrUserName\lpstrDomain的必须为256长度的字符串,不可为空,如为空字符串必须以“\0”为开头
dwAuthProvider固定为1
dwDialoType固定为0
lpstrTitle是一可为空的字符串参数
dwFlags可为0,1,$20000
dwExtenedResult\lCustData\lpTemplateName不可用
lpfnHook可为0调用后老是返回以上错误信息,是否我使用SIZEOF函数不正确,如果是我该用什么函数获得此结构的长度值
但是:
1.FALSE/TRUE与false/true的区别:false/true是标准C++语言里新增的关键字,而FALSE/TRUE是通过#define,这要用途是解决程序在C与C++中环境的差异,以下是FALSE/TRUE在windef.h的定义:#ifndef FALSE
#define FALSE 0
#endif#ifndef TRUE
#define TRUE 1
#endif
也就是说FALSE/TRUE是int类型,而false/true是bool类型;所以两者不一样的,只不过我们在使用中没有这种感觉,因为C++会帮你做隐式转换。2.bool的大小与BOOL的区别:bool在C++里是占用1字节,而BOOL是int类型,int类型的大小是视具体环境而定的;所以来说:false/true只占用1个字节,而TRUE/FALSE视具体环境而言,以下是BOOL在windef.h中的定义:typedef int BOOL;3.NULL与0的区别:还是让我们看一下windef.h中NULL的定义:#ifndef NULL
#ifdef __cplusplus//这个是指示是用C++来编译程序
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif所以说:它们没有区别,只不过在C里面会做一个强制类型转换。//难道改成int类型有错吗?BOOL类型导出供DELPHI用就有问题,难道不对?
从VB的实例来看,这个调用并不困难,楼上兄弟的讨论问题我都试过了,
但转为DELPHI的调用就老是报错。
该放弃么???
为何这么说?
我用C#很快就可以调用了,delphi真没用
其实我开始也是不相信delphi不能调用的,到结果由不得你相信delphi。
况且产品的开发商也没在产品上注明支持delphi调用,但却注明可以用C/VB/BOLAND C调用
你最好还是把delphi的调用代码贴出来看看.
请注意你的言语,“白痴!”
这些,要少说点!
你先检查DLL函数的名字的大小写有没有写错?
否则,就会报错!