VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 546|回复: 3

关于DLL编程

[复制链接]
44_avatar_middle
最佳答案
0 
online_vip 发表于 2019-7-19 11:33:22 | 显示全部楼层 |阅读模式
50驿站币
彻底搞不明白了。
1
用普通的DLL写程序,比方说导出一个函数接口 add(int a, int b) 返回a+b
那么这个接口可以被任何程序调用,如vb,delphi,易语言等,我的需要就是要被别的语言调用。

但是普通的DLL中写个函数,如操作文件的,很麻烦,我想使用MFC类库来写。

那么现在的问题是,MFC三种DLL方式
关于DLL编程

那么这个MFC静态DLL中我也导出一个add接口,是否可以被其他语言调用。


2
普通的DLL中,有一个选择项是,添加公共头文件以用于MFC。
关于DLL编程

那么这句话是什么意思?

默认生成的是:
  1. #include "stdafx.h"
  2. #include "44.h"

  3. #ifdef _DEBUG
  4. #define new DEBUG_NEW
  5. #endif


  6. // 唯一的应用程序对象

  7. CWinApp theApp;

  8. using namespace std;

  9. int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
  10. {
  11.         int nRetCode = 0;

  12.         // 初始化 MFC 并在失败时显示错误
  13.         if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
  14.         {
  15.                 // TODO: 更改错误代码以符合您的需要
  16.                 _tprintf(_T("错误: MFC 初始化失败\n"));
  17.                 nRetCode = 1;
  18.         }
  19.         else
  20.         {
  21.                 // TODO: 在此处为应用程序的行为编写代码。
  22.         }


  23.         return nRetCode;
  24. }
复制代码


这里面怎么没有DLLMAIN,就因为支持了下MFC,又被隐藏了还是?
那么我在这个_tmain里面都写什么代码?怎么看着和DLL都没有关系。
和普通的控制台程序一样、


我看了网上的贴子,一个一个作者讲都讲不清楚,越来越糊涂了,误人子弟啊。

求助老大给耐心讲解一下,谢谢。@Syc

最佳答案

查看完整内容

我在《VC++动态库编程》的教程中已经讲解过了:https://www.cctry.com/forum-27-1.html MFC规则DLL是可以被其他语言所调用的,MFC扩展DLL只能被MFC的程序调用




上一篇:GetVersionEx的问题求助
下一篇:哪位大佬有支持vs2005版的小番茄
51_avatar_middle
最佳答案
82 
online_admins 发表于 2019-7-19 11:33:23 | 显示全部楼层
我在《VC++动态库编程》的教程中已经讲解过了:https://www.cctry.com/forum-27-1.html
MFC规则DLL是可以被其他语言所调用的,MFC扩展DLL只能被MFC的程序调用
44_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-8-20 15:14:54 | 显示全部楼层
Syc 发表于 2019-7-19 11:33
我在《VC++动态库编程》的教程中已经讲解过了:https://www.cctry.com/forum-27-1.html
MFC规则DLL是可以 ...

如果DLL不导出任何函数,但是让别的程序加载。

在VS里面,这种设置的。
关于DLL编程
关于DLL编程

生成后:
  1. #include "stdafx.h"
  2. #include "testtest.h"

  3. #ifdef _DEBUG
  4. #define new DEBUG_NEW
  5. #endif


  6. // 唯一的应用程序对象

  7. CWinApp theApp;

  8. using namespace std;

  9. int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
  10. {
  11.         int nRetCode = 0;

  12.         // 初始化 MFC 并在失败时显示错误
  13.         if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
  14.         {
  15.                 // TODO: 更改错误代码以符合您的需要
  16.                 _tprintf(_T("错误: MFC 初始化失败\n"));
  17.                 nRetCode = 1;
  18.         }
  19.         else
  20.         {
  21.                 // TODO: 在此处为应用程序的行为编写代码。
  22.         }


  23.         return nRetCode;
  24. }
复制代码


只有_tmain,是不是只能导出类,因为没有dllmain,

所以不能像win32 dll中那样在DLL_PROCESS_ATTACH的时候调用fun()吧?
  1. void fun()
  2. {
  3. OutputDebugString("已经加载^_^!\n");
  4. }


  5. BOOL APIENTRY DllMain( HMODULE hModule,
  6.                                           DWORD  ul_reason_for_call,
  7.                                           LPVOID lpReserved
  8.                                           )
  9. {
  10.         switch (ul_reason_for_call)
  11.         {
  12.         case DLL_PROCESS_ATTACH:
  13.                 {
  14.                     fun();
  15.                 }
  16.                 break;
  17.         case DLL_THREAD_ATTACH:
  18.         case DLL_THREAD_DETACH:
  19.         case DLL_PROCESS_DETACH:
  20.                 break;
  21.         }
  22.         return TRUE;
  23. }
复制代码


求助老大,搞晕了。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-27 17:59

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表