详细了解我的问题:
我有cpp文件,它从一个用c写的dll文件中调用函数。
这是一个示例代码
first.cpp :
#include <stdio.h>
#include "Header.h"
#include <windows.h>
typedef double(*MYFUN1)(double);
int main1(int k )
{
MYFUN1 pfun1;
HMODULE hMod;
hMod = LoadLibrary(L"MyMathDll.dll");
pfun1 = (MYFUN1)GetProcAddress(hMod, "PowerOf3");
int ii, max = 20;
for (ii = 0; ii < max; ii++)
{
printf("%le", pfun1(10));
}
return ii;
}
header.h
#pragma once
int main1(int k);
My MyMathDll.dll由以下两个文件组成:
的 MyMathDll.c
#include "MyMathDll.h"
double PowerOf3(double UserNumber)
{
return UserNumber * UserNumber * UserNumber;
}
MyMathDll.h
#include <stdio.h>
#if defined (WIN32)
#if defined(FUNCTIONS_STATIC)
#define FUNCTIONS_API
#else
#if defined(FUNCTIONS_EXPORTS)
#define FUNCTIONS_API __declspec(dllexport)
#else
#define FUNCTIONS_API __declspec(dllimport)
#endif
#endif
#else
#define FUNCTIONS_API
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifdef MYMATHDLL_EXPORTS
#define MYMATHDLL_API __declspec(dllexport)
#else
#define MYMATHDLL_API __declspec(dllimport)
#endif
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <math.h>
MYMATHDLL_API double PowerOf3(double UserNumber);
#ifdef __cplusplus
}
#endif
现在我正在编译first.cpp到一个dll文件,所以基本上我正在尝试创建一个已经调用另一个c dll文件中的函数的dll文件。
我构建了一个生成dll文件的项目。现在我正在使用应用程序类型.exe创建新项目并尝试加载从first.cpp生成的dll文件 第二个cpp的示例代码,它调用first.cpp
中的函数second.cpp
#include <stdio.h>
#include <windows.h>
typedef int (*MYFUN4)(int );
void main()
{
int k = 10;
MYFUN4 pfun4;
HMODULE hMod2;
hMod2 = LoadLibrary(L"first.dll");
pfun4 = (MYFUN4)GetProcAddress(hMod2, "main1");
printf("%d", pfun4(k));
getchar();
}
当我尝试运行此应用程序时,我会看到一个弹出窗口,其中包含以下消息:
在ConsoleApplication7.exe中的0x00000000处触发异常:0xC0000005:在位置0x00000000处运行时发生访问冲突。
如果存在此异常的处理程序,程序仍可以安全运行。