gpt4 book ai didi

c++ - 使用 DLL 函数时出现访问冲突异常

转载 作者:太空宇宙 更新时间:2023-11-04 15:48:41 28 4
gpt4 key购买 nike

我在 C++ 练习中创建了一个简单的 DLL,但在调用 DLL 函数时出现访问冲突异常。这是 DLL 的头文件(我怀疑 CPP 在这里会有用):

#pragma once

namespace MathFuncs
{
class MyMathFuncs
{
public:
// Returns a + b
static __declspec(dllexport) double Add(double a, double b);

// Returns a - b
static __declspec(dllexport) double Subtract(double a, double b);

// Returns a * b
static __declspec(dllexport) double Multiply(double a, double b);

// Returns a / b
// Throws DivideByZeroException if b is 0
static __declspec(dllexport) double Divide(double a, double b);
};
}

这是我的主要内容:

#include <iostream>
#include "windows.h"

using namespace std;

int main(void)
{
double (__cdecl *MYPROC)(double,double);
/* get handle to dll */
HINSTANCE hGetProcIDDLL = LoadLibrary("DLLExample.dll");
if(hGetProcIDDLL == NULL)
throw;
/* get pointer to the function in the dll*/
FARPROC lpfnGetProcessID = GetProcAddress(hGetProcIDDLL,"Add");
if(lpfnGetProcessID)
throw;
MYPROC = (double (__cdecl *)(double,double))lpfnGetProcessID;
if(MYPROC)
throw;

double x = MYPROC(5.5,5);

return 0;
}

有什么建议吗?谢谢!

最佳答案

你的问题出在这里:

FARPROC lpfnGetProcessID = GetProcAddress(hGetProcIDDLL,"Add"); 
if(lpfnGetProcessID) // <-- error!
throw;
MYPROC = (double (__cdecl *)(double,double))lpfnGetProcessID;
if(MYPROC) // <-- error!
throw;

double x = MYPROC(5.5,5);

如果 lpfnGetProcessId 有一个地址,您将抛出一个异常。如果没有,您稍后会尝试调用它(砰!)。

您将希望使用 extern "C" 修饰您的函数,以确保它们以用户友好的名称导出。这意味着它们不能在一个类中:

namespace MathFuncs
{
extern "C" __declspec(dllexport) double Add(double, double);
}

关于c++ - 使用 DLL 函数时出现访问冲突异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12428423/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com