64位MFC程序调用32位DLL

注意: 本篇文章由ChatGPT生成,然后领导看了ChatGPT的结论就觉得可以做,让俺去试。俺试了之后确定不能做,然后领导就偷偷去招人,结果面试的那群人都说能做!毫无意外的,我年底绩效被打C,扣钱+明示暗示,让我自己离职,特此留下一文以作纪念

文章如下

当64位MFC应用程序调用32位DLL时,你可以通过创建一个中间层Wrapper DLL来实现。下面是一个简单的示例,演示如何从64位MFC应用程序调用32位DLL的函数:

假设你有一个32位DLL,其中包含一个名为MyFunction的函数,它接受一个整数参数并返回一个整数。你想从64位MFC应用程序中调用这个函数。

首先,创建一个新的64位DLL项目(Wrapper DLL),用于与32位DLL进行交互。在这个64位DLL项目中,编写一个导出函数,该函数将调用32位DLL的函数。

下面是一个简单的例子:

// WrapperDLL.h
#pragma once

#ifdef WRAPPERDLL_EXPORTS
#define WRAPPERDLL_API __declspec(dllexport)
#else
#define WRAPPERDLL_API __declspec(dllimport)
#endif

extern "C" WRAPPERDLL_API int CallMyFunction(int value);
// WrapperDLL.cpp
#include "WrapperDLL.h"
#include "windows.h"

typedef int(*MYFUNCTION)(int);

int CallMyFunction(int value)
{
    HINSTANCE hDLL = LoadLibrary(L"path_to_32bit_dll.dll");
    if (hDLL != NULL)
    {
        MYFUNCTION myFunction = (MYFUNCTION)GetProcAddress(hDLL, "MyFunction");
        if (myFunction != NULL)
        {
            int result = myFunction(value);
            FreeLibrary(hDLL);
            return result;
        }
        FreeLibrary(hDLL);
    }
    return -1;
}

在这个示例中,我们创建了一个名为CallMyFunction的导出函数。该函数加载32位DLL,并使用GetProcAddress函数获取MyFunction函数的地址。然后,我们将参数传递给32位DLL的函数,并返回结果。

接下来,编译这个Wrapper DLL项目,并生成一个64位的DLL文件。

然后,在你的64位MFC应用程序中,你可以通过调用CallMyFunction函数来间接调用32位DLL的函数。例如:

// MFCAppDlg.cpp (64位MFC应用程序的对话框类文件)
#include "WrapperDLL.h"

// ...

void CMFCAppDlg::OnBnClickedButton1()
{
    int result = CallMyFunction(42);
    // 处理结果...
}

这里,我们在MFC应用程序中的按钮单击事件处理程序中调用了CallMyFunction函数,将参数值 42 传递给32位DLL的函数。你可以根据需要使用返回的结果。

需要确保在编译64位MFC应用程序和Wrapper DLL时,使用相应的64位编译器选项。此外,还需要将32位DLL的路径替换为你自己的实际路径。

这只是一个简单的示例,具体的实现可能因实际情况而有所不同。你可能需要根据32位DLL的特定函数和参数来进行更多的调整和适配。

真正的解决方案: 创建一个32位的服务,然后通过TCP/websocket通信,来实现调用。当主程序启动时,通过命令行同时启动32位的服务,然后服务和主程序通信

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
MFC(Microsoft Foundation Class)是微软公司开发的一套用于开发图形用户界面(GUI)应用程序的类库。而DLL(Dynamic Link Library)是一种包含可被多个程序同时使用的代码和资源的文件。MFC调用DLL可以实现模块化开发,提高软件的复用性和效率。 MFC调用DLL有多种方式,其中一种常见的方式是使用动态链接的方式。首先,在MFC应用程序中引入DLL的.h文件,并在相应的类中声明要调用的函数。然后,在MFC应用程序的初始化过程中,使用LoadLibrary函数加载DLL并通过GetProcAddress函数获取DLL中导出函数的地址。最后,通过函数指针调用DLL中的函数来实现所需的功能。 例如,假设有一个MFC应用程序需要调用一个DLL中的函数来实现加法操作。首先,在MFC应用程序的类中声明函数指针类型和函数原型,如:typedef int (*AddFunc)(int, int);。然后,在初始化过程中加载DLL,并获取相应函数的地址:HMODULE hDll = LoadLibrary(L"mydll.dll"); AddFunc pAddFunc = (AddFunc)GetProcAddress(hDll, "Add");。最后,通过函数指针调用DLL中的函数:int result = pAddFunc(2, 3);。 需要注意的是,MFC调用DLL时还要处理异常情况,比如DLL加载失败或函数获取失败的情况,可以使用try-catch语句来捕获异常并进行相应处理。另外,还需要在使用完DLL后及时进行释放,使用FreeLibrary函数来释放动态链接库的句柄。 综上所述,MFC调用DLL是一种实现模块化开发,提高软件复用性和效率的方式。通过合适的加载调用方式,可以方便地在MFC应用程序中使用DLL中的函数来实现特定功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值