VC调用DLL?

rfuture 2004-07-20 04:39:37
VC初学者,以前一直搞Delphi的,所以对VC不怎么熟悉。
现在用VC编了一个DLL,不知道正确与否,想测试一下,但不知道怎么在VC里面调用DLL
我DLL里面供调用的函数是:
extern "C" int __declspec(dllexport) __stdcall seekcrypt (int flag,unsigned char* instr,int instrlen,unsigned char* key,unsigned char* outstr,int* outstrlen_ptr)

那个朋友还能给我个关于VC调用DLL的步骤?

帮帮忙啊??急!!
...全文
6649 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
rfuture 2004-07-21
  • 打赏
  • 举报
回复
我做的Dll是seekcrypt.dll里面供调用的函数是
seekcrypt(int flag,unsigned char* instr,int instrlen,unsigned char* key,unsigned char* outstr,int* outstrlen_ptr)

下面是我调用的过程。看看那里出问题了。


void CTestDlg::OnOK()
{
HINSTANCE hInst = LoadLibrary("seekcrypt.dll");
if(hInst)
{
typedef int (*_seekcrypt)(int,unsigned char* ,int,unsigned char*,unsigned char* ,int* );
_seekcrypt seekcrypt = NULL;
seekcrypt = (_seekcrypt)GetProcAddress(hInst, "seekcrpyt");
if(seekcrypt)
{ //我测试的时候,这里不执行,也就是说if里面的seekcrypt是false
int i=seekcrypt(1,'12',2,'1212','2323',4);
CString aa;
aa.Format("%d%s",i,aa);
AfxMessageBox(aa);
}
FreeLibrary(hInst);
}else{
AfxMessageBox("找不到seekcrypt.dll文件。");
}
}

整个这个程序有错误吗
holyeagle 2004-07-21
  • 打赏
  • 举报
回复
一般来说,动态连接的步骤
1.loadlibrary,将dll加载到进程空间
2.GetProcAddress,找到函数入口,返回指针,就是函数,
typedef DWORD (*PDllFunction)(); //定义函数类型
PDllFunction fnDllFunction = (PDllFunction)
GetProcAddress( hModule, "seekcrypt");
其中hModule就是loadlibrary返回的handle,seekcrypt就是要调用的函数名。
3.调用函数,如fnDllFunction(xxx,xxx);

holyeagle 2004-07-21
  • 打赏
  • 举报
回复
如果你只想先用dll话,建议不需要看那么深,可以在www.codeproject.net上面找一个比较简单的例子。在msdn里查loadlibrary,也会有相关的例子
rfuture 2004-07-21
  • 打赏
  • 举报
回复
何为按名称导出和按序号导出啊?


to:holyeagle(一杯清茶)
我在网上是找到例子了,但是没有相关解释啊?
holyeagle 2004-07-21
  • 打赏
  • 举报
回复
从网上找个例子吧,看起来直观一点,很多的
招财猫_Martin 2004-07-21
  • 打赏
  • 举报
回复
DLL的导出方式有按名称导出和按序号导出,这里的@1就是按序号导出时的序号了
rfuture 2004-07-20
  • 打赏
  • 举报
回复
Dll中的def文件中的

EXPORTS
ShowMe @1 ?这里的@1是什么意思啊?
; Explicit exports can go here
rfuture 2004-07-20
  • 打赏
  • 举报
回复
是的,这个动态调用,你说的哪个是静态调用。静态调用说的不是很能明白。

所以不是很清楚,帮看看这个动态调用有没有问题?

snowx 2004-07-20
  • 打赏
  • 举报
回复
赫赫,调用dll的不同方式而已

rfuture 2004-07-20
  • 打赏
  • 举报
回复
void CTestDlg::OnOK()
{
HINSTANCE hInst = LoadLibrary("seekcrypt.dll");
if(hInst)
{
typedef int (*_seekcrypt)(int,unsigned char* ,int,unsigned char*,unsigned char* ,int* );
_seekcrypt seekcrypt = NULL;
seekcrypt = (_seekcrypt)GetProcAddress(hInst, "seekcrpyt");
if(seekcrypt)
{
int i=seekcrypt(1,'12',2,'1212','2323',4);
CString aa;
aa.Format("%d%s",i,aa);
AfxMessageBox(aa);
}
FreeLibrary(hInst);
}else{
AfxMessageBox("找不到seekcrypt.dll文件。");
}
}

我依葫芦画瓢照搬了一个人家的,大家看看还对,那里需要修改的。

我Dll的是seekcrypt.dll里面供外面调用的函数是:
extern "C" int __declspec(dllexport) __stdcall seekcrypt (int flag,unsigned char* instr,int instrlen,unsigned char* key,unsigned char* outstr,int* outstrlen_ptr)
rfuture 2004-07-20
  • 打赏
  • 举报
回复
to:snowx(silverghost)

不要函数申明的头文件吧。
我没有单独的给出关于函数的申明的文件,直接就是函数定义的文件。
snowx 2004-07-20
  • 打赏
  • 举报
回复
你输出dll的时候,一定有一个提供给其他程序调用的头文件吧
里面放了dll中函数的申明,不然dll的函数没法使用
名牌大灰狼 2004-07-20
  • 打赏
  • 举报
回复
HMODULE LoadLibrary();
FARPROC GetProcAddress();
BOOL FreeLibrary();
rfuture 2004-07-20
  • 打赏
  • 举报
回复
动态连接库的头文件是指哪个啊
Resource.h
seekcrypt.h //工程名是seekcrypt
StdAfx.h

rfuture 2004-07-20
  • 打赏
  • 举报
回复
那如果我想直接在 Console Application 中来测试一下DLL中的函数,不要用MFC还可以啊?
对用MFC还不熟:)
招财猫_Martin 2004-07-20
  • 打赏
  • 举报
回复
1、在你的公共头文件中包含你声明DLL导出函数的include文件,如#include "yourdll.h"
2、引用你导出的Lib文件,如:#pragma comment("yourdll")。这里的yourdll是指yourdll.lib文件
3、在应用程序目录下拷贝yourdll.dll
zxl_lim 2004-07-20
  • 打赏
  • 举报
回复
装载DLL
HMODULE LoadLibrary(
LPCTSTR lpFileName
);
获得所需函数
FARPROC GetProcAddress(
HMODULE hModule,
LPCSTR lpProcName
);
释放DLL
BOOL FreeLibrary(
HMODULE hModule
);
具体见MSDN
numen27 2004-07-20
  • 打赏
  • 举报
回复
1.把动态连接库的头文件拷到工程目录下面。
2。在用动态连接库导出函数的文件里加入:
#include "XXX.h"(上面所说的文件)
3.菜单项:project->Setting->Link
在Object/library modules里面加入"XXX.dll"(动态连接库名称)
rfuture 2004-07-20
  • 打赏
  • 举报
回复
在Debug文件夹里面有LIB这个文件,包含DLL头文件是什么意思啊?
rfuture 2004-07-20
  • 打赏
  • 举报
回复
能说说具体的步骤吗?以前真的从来没有搞过VC。
加载更多回复(1)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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