我可以编译.cpp文件到一个DLL文件,其中cpp文件本身调用另一个DLL文件中的函数

时间:2018-02-22 12:45:43

标签: c++ c visual-studio-2017

详细了解我的问题:
我有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处运行时发生访问冲突。

如果存在此异常的处理程序,程序仍可以安全运行。

0 个答案:

没有答案