VC++写的DLL找不到入口点???

Richard2001 2001-09-19 09:02:22
VC++写了一个DLL,用VB调用,但找不到入口点:

VC++ Code:
-------------
#ifdef __cplusplus
extern "C" {
#endif

__declspec(dllexport) bool __stdcall SetSecurity(char * QueuePathName,char * UserGroup1,char * UserGroup2);

#ifdef __cplusplus
}
#endif

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
//此处能进入
return TRUE;
}

__declspec(dllexport) bool __stdcall SetSecurity(char * QueuePathName,char * UserGroup1,char * UserGroup2)
{
//此处不能进入
...
}

*****************************************

VB Code:
--------

Private Declare Function SetSecurity Lib "SetSecu.dll" (ByVal QueuePath$, ByVal AdminGroup$, ByVal UserGroup$) As Boolean

Private Sub Command1_Click()
Dim q As String, u1 As String, u2 As String
q = Trim(txtQueue.Text)
u1 = Trim(txtUser.Text)
u2 = Trim(txtUser2.Text)

If SetSecurity(q, u1, u2) Then
Beep
End If
End Sub

**************************

报错信息:
--------
运行时错误'453':不能找到入口点SetSecurity在SetSecu.dll
...全文
178 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Richard2001 2001-09-19
  • 打赏
  • 举报
回复
请问具体怎么操作?这个DEF文件名叫什么?内容又是什么?
在Project工程中要作什么相应设置?
zzh 2001-09-19
  • 打赏
  • 举报
回复
在VC的程序中还应该在DEF文件中定义一下这个函数,然后再编译,这样的DLL才能够使用。
NowCan 2001-09-19
  • 打赏
  • 举报
回复
LIBRARY Security//这是你的DLL名称
EXPORTS
SetSecurity

文件名应该和你的DLL文件名一样,但扩展名为DEF
最简单的dll并不比c的helloworld难,只要一个DllMain函数即可,包含objbase.h头文件(支持COM技术的一个头文件)。若你觉得这个头文件名字难记,那么用windows.H也可以。源代码如下:dll_nolib.cpp #include #include BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, void* lpReserved) { HANDLE g_hModule; switch(dwReason) { case DLL_PROCESS_ATTACH: cout<<"Dll is attached!"<DLL_PROCESS_DETACH: cout<<"Dll is detached!"<DllMain是每个dll入口函数,如同c的main函数一样。DllMain带有三个参数,hModule表示本dll的实例句柄(听不懂就不理它,过windows程序的自然懂),dwReason表示dll当前所处的状态,例如DLL_PROCESS_ATTACH表示dll刚刚被加载到一个进程中,DLL_PROCESS_DETACH表示dll刚刚从一个进程中卸载。当然还有表示加载到线程中和从线程中卸载的状态,这里省略。最后一个参数是一个保留参数(目前和dll的一些状态相关,但是很少使用)。 从上面的程序可以看出,当dll被加载到一个进程中时,dll打印"Dll is attached!"语句;当dll从进程中卸载时,打印"Dll is detached!"语句。 编译dll需要以下两条命令: cl /c dll_nolib.cpp 这条命令会将cpp编译为obj文件,若不使用/c参数则cl还会试图继续将obj链接为exe,但是这里是一个dll,没有main函数,因此会报错。不要紧,继续使用链接命令。 Link /dll dll_nolib.obj 这条命令会生成dll_nolib.dll。 注意,因为编译命令比较简单,所以本文不讨论nmake,有兴趣的可以使用nmake,或者个bat批处理来编译链接dll。 加载DLL(显式调用)

70,021

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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