如何产生,使用dll文件??? http://www.codeguru.com/dll/index.shtml上面有例子,不要说告诉我说是英语看不懂! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 将main函数改名,并用extern "C" void __declspec(dllexport) mainout()~~~~~~~~~ ^^^^ ~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~函数栈方式按照C语法(可选)返回值 声明导出 你的函数名称和参数。project->settings->C++->preprocessor Definitions: "_CONSOLE"替换为"_DLL"project->settings->Link->object/library modules: "/subsystem/console"替换为 "/dll"同理,你如果是'_windows',replace with '_dll'if you are '/subsystem/windows' replace with '/dll' to niu_a(阿牛):十分感谢!我还想知道: 看到msdn里所说的dllmain()是怎么回事?是不是 我想从dll中export任何函数或者变量都是这样?(你说的可选是 extern "C" , 还是 void?) extern "C"是可选的dllmain()是dll的主函数,你如果不写,编译器帮你生成一个下面是一个dllmain的简单形式BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE;}你如果有vc的话,可以生成一个win32 dynamic-link library,看看起生成的源代码,或者看一些win32编程的资料,应该比我说的准确和详细 我用VC6.0中生成了一个win32 Dynamic-link Library 的project(是空白的project,即不会自动产生dllmain()函数),然后我把我的C的file加入到project中(这些file有main()函数,我没有做任何改变),编译通过,产生了一个dll文件。请问这个dll文件是不是就应该是我要的dll文件?是不是我void __declspec(dllexport) mainout();声明后的函数,别人才能调用,否则就不可以? 是不是在VC中用win32 Dynamic-link Library 产生的dll文件只能用于win32的application 中,用MFC AppWizard(dll)产生的dll文件只能用于MFC的application中? mfc app是一个调用mfc42*.dll的win32 app ~~~~~~~~~~~~~也可以静态连接。还有vc6.0 有个tool Depends.exe 可以察看dll的导出(类,函数,变量等等)我想你可以先看看一些关于win32 dll的资料,大概了解一些,写起程序来就会顺手很多 我现在的问题:1 刚才我生成的dll文件是否正确? 2 如果正确是不是像niu_a(阿牛) 所说的那样声明可调用的函数? 3 如果不正确是不是一定要写成dllmain()的程式 我现在的问题:1 刚才我生成的dll文件是否正确? 2 如果正确是不是像niu_a(阿牛) 所说的那样声明可调用的函数? 3 如果不正确是不是一定要写成dllmain()的程式 我现在的问题:1 刚才我生成的dll文件是否正确? 2 如果正确是不是像niu_a(阿牛) 所说的那样声明可调用的函数? 3 如果不正确是不是一定要写成dllmain()的程式 1、2、呵呵,你刚才生成的dll文件显然不是你想要的,函数名都不正确。3、可以有多种形式,象def文件,在头文件中声明,但是意义都是一样的 to niu_a(阿牛) :举个例子:我写了一个c的file(至于其中code的细节不讨论),叫做file.c,void set(int i){ //empty}void swap(int a, int b){ //empty}void main(){ int a,b; set(a); set(b); swap(a,b);}(main () 是我将来想被别人使用的接口函数)我用VC编译通过。然后我新建一个WIN32 Dynamic-link Library 的project,叫filedll, 选择空的project, 再把我的file.c加入到project中,然后编译通过,在..\debug\目录下产生filedll.dll文件,按照niu_a(阿牛) 说的,这是不正确的dll文件对吗?那么,接下来我是不是就要把file.c用dllmain()改写?还是我只要或者在DEF文件里声明我的接口main()就可以了?另外DEF文件不是自动生成的吧?自己写的? com的dll可用ATL一般的dll可用VC的dll wizard生成。然后用exe调用dll。具体最好看书学。还有什么问题尽管问 我看了<<programming Visual C++ 5th Edtion>>,里面介绍的都是和MFC和WIN32有关的dll,但是dll好像不是微软的专利技术吧,早在windows前就有了,而我的dll又不想专用于windows下,想用标准的C写一个dll,那又如何?我试过了VC的dll wizard, 他的dllmain()不是只能用于win32 平台吗?而MFC Appwizard(dll)产生的又不是纯C的代码,而是MFC的啊!难道没有其它方法来写自己的dll了吗? 建立一个空的win32 dynamic link library工程把你要输出的文件加上__declspec( dllexport )然后build 建立一个空的win32 dynamic link library工程把你要输出的函数加上__declspec( dllexport )然后build niu_a()啊牛兄讲的太好了, anyh() 我再接你的例子说两句:void main(){ int a,b; set(a); set(b); swap(a,b);}整个的不要,函数说明、定义中加上__declspec(dllexport)void _declspec(dllexport) set(int i){ //empty}void _declspec(dllexport) swap(int a, int b){ //empty}最后编写一个.def文件LIABRARY "SW"EXPORTS set @1 swap @2; OK了; 应用程序中添加上该文件的 .lib 文件 即可 即使用main产生的exe也可以提供接口的。dll不一定好使用 word中使用ocx显示图片,出问题 MFC+ODBC+SQLServer存储过程,保存图片到数据库某表中的Image字段 在没有安装Access的机器上怎么运行程序 请问:GetDlgItem(IDC_HOMEPAGE)->GetWindowRect(&m_pRectLink)是什么意思? 关于CString的问题 如何处理编辑操作的Undo/Redo功能? 异常问题 关于开发DDK程序的前途问题? 新人求助VC++RPG游戏编程 该死的对话框 大家好!五一大家都有什么活动呀? 一个关于CAsyncSocket类connect方法超时的问题
extern "C" void __declspec(dllexport) mainout()
~~~~~~~~~ ^^^^ ~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~
函数栈方式按照C语法(可选)返回值 声明导出 你的函数名称和参数。project->settings->C++->preprocessor Definitions:
"_CONSOLE"替换为"_DLL"
project->settings->Link->object/library modules:
"/subsystem/console"替换为 "/dll"
同理,你如果是'_windows',replace with '_dll'
if you are '/subsystem/windows' replace with '/dll'
十分感谢!
我还想知道: 看到msdn里所说的dllmain()是怎么回事?是不是 我想从dll中export任何函数或者变量都是这样?
(你说的可选是 extern "C" , 还是 void?)
dllmain()是dll的主函数,你如果不写,编译器帮你生成一个
下面是一个dllmain的简单形式
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
你如果有vc的话,可以生成一个win32 dynamic-link library,看看起生成的源代码,或者看一些win32编程的资料,应该比我说的准确和详细
void __declspec(dllexport) mainout();声明后的函数,别人才能调用,否则就不可以?
~~~~~~~~~~~~~也可以静态连接。
还有vc6.0 有个tool Depends.exe 可以察看dll的导出(类,函数,变量等等)我想你可以先看看一些关于win32 dll的资料,大概了解一些,写起程序来就会顺手很多
2 如果正确是不是像niu_a(阿牛) 所说的那样声明可调用的函数?
3 如果不正确是不是一定要写成dllmain()的程式
2 如果正确是不是像niu_a(阿牛) 所说的那样声明可调用的函数?
3 如果不正确是不是一定要写成dllmain()的程式
2 如果正确是不是像niu_a(阿牛) 所说的那样声明可调用的函数?
3 如果不正确是不是一定要写成dllmain()的程式
3、可以有多种形式,象def文件,在头文件中声明,但是意义都是一样的
我写了一个c的file(至于其中code的细节不讨论),叫做file.c,
void set(int i)
{
//empty
}void swap(int a, int b)
{
//empty
}void main()
{
int a,b; set(a);
set(b);
swap(a,b);
}
(main () 是我将来想被别人使用的接口函数)
我用VC编译通过。然后我新建一个WIN32 Dynamic-link Library 的project,叫filedll, 选择空的project, 再把我的file.c加入到project中,然后编译通过,在..\debug\目录下产生filedll.dll文件,按照niu_a(阿牛) 说的,这是不正确的dll文件对吗?
那么,接下来我是不是就要把file.c用dllmain()改写?还是我只要或者在DEF文件里声明我的接口main()就可以了?另外DEF文件不是自动生成的吧?自己写的?
一般的dll可用VC的dll wizard生成。然后用exe调用dll。具体最好看书学。还有什么问题尽管问
我试过了VC的dll wizard, 他的dllmain()不是只能用于win32 平台吗?
而MFC Appwizard(dll)产生的又不是纯C的代码,而是MFC的啊!难道没有其它方法来写自己的dll了吗?
把你要输出的文件加上__declspec( dllexport )然后build
把你要输出的函数加上__declspec( dllexport )然后build
{
int a,b;
set(a);
set(b);
swap(a,b);
}
整个的不要,函数说明、定义中加上__declspec(dllexport)
void _declspec(dllexport) set(int i)
{
//empty
}void _declspec(dllexport) swap(int a, int b)
{
//empty
}最后编写一个.def文件LIABRARY "SW"
EXPORTS
set @1
swap @2; OK了
; 应用程序中添加上该文件的 .lib 文件 即可
dll不一定好使用