如何在C ++中创建DLL库,然后在C项目VisualStudio(2015)中使用它?
我只看到1 question与我的问题相似,但我无法理解它。
我已经看过很多教程,介绍如何使用C ++编写的.dll到另一个C ++项目,C#中使用的C .dll,但没有关于如何将C ++ .dll用于C VS项目的示例。 我真的需要帮助,我已经在互联网上搜索过各种各样的解决方案'对我的问题,仍然没有任何解决方案。
我真的需要你的帮助。
C ++ dll项目具有以下内容:
//C++ dll Header Library, having the name "dllDelay.h":
#include <iostream>
#include <stdio.h>
#include <windows.h>
extern "C" __declspec(dllexport) void dllDelay(DWORD dwMsec);
#endif
//C++ .cpp file named "dllDelay.cpp":
#include "dllDelay.h"
#include "stdafx.h"
extern "C" __declspec(dllexport)
void dllDelay(DWORD dwMsec) {
Sleep(dwMsec);
}
C VisualStudio(2015)项目具有以下内容:
/*This function is intended to Delay 10 seconds, measure that elapsed time
and write it into a file. I've checked this function using Sleep() instead of
dllDelay() and it worked fine, so this function has no errors.*/
#include "dllDelay.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
int main(void)
{
FILE *write1;
// measure elapsed time on windows with QueryPerformanceCounter() :
LARGE_INTEGER frequency; // ticks per second
LARGE_INTEGER t1, t2; // ticks
double elapsedTime;
write1 = fopen("write_difftime_1Test.txt", "w");
fprintf(write1, "\n Sleep : 10000ms = 10s");
time_t start, stop;
clock_t ticks;
long count;
double i = 0, v = 0, j = 0;
//make 10 such measurements and write them into file
while ((j < 10) && ((write1 != NULL) && (TRUE != fseek(write1, 0L, SEEK_END))))
{
QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&t1);
time(&start);
//The function from dll
dllDelay(10000);
time(&stop);
QueryPerformanceCounter(&t2);
// compute and print the elapsed time in millisec
elapsedTime = (t2.QuadPart - t1.QuadPart) * 1000.0 / frequency.QuadPart;
fprintf(write1, "\n Elapsed time : %lf s. timeDiff time: %f in seconds\n\n", elapsedTime / 1000, difftime(stop, start));
j++;
}
fclose(write1);
return 0;
} `
此功能用于延迟10秒,测量经过的时间 并将其写入文件。 我已使用Sleep()代替而检查了此功能 dllDelay()并且工作正常,因此该函数没有错误。
但当我使用 #include "dllDelay.h"
时,我会收到3111错误,例如:
标识符* write1未定义自FILE *write1;
标识符clock_t未定义自clock_t ticks;
using _CSTD log10; using _CSTD modf; using _CSTD pow;
using _CSTD log10; using _CSTD modf; using _CSTD pow;
我构建了dll(当然是在dll项目中),将.dll文件复制到找到exe的C Project文件夹中,我在解决方案资源管理器中添加了.lib文件并得到了这些错误。
我真的需要你的帮助,我到处寻找,并没有找到关于C项目中使用的C ++ .dll的使用的指南或任何内容。 :|
感谢您的时间。
答案 0 :(得分:1)
在C ++ DLL项目中,打开项目属性并定义预处理器符号:
然后在头文件中,根据是否定义了以红色圈出的预处理器符号来定义另一个符号:
#ifdef CPPDLL_EXPORTS
#define DLLIMPORT_EXPORT __declspec(dllexport)
#else
#define DLLIMPORT_EXPORT __declspec(dllimport)
#endif
然后在函数声明前面使用该定义的符号:
DLLIMPORT_EXPORT void dllDelay(DWORD dwMsec);
这具有以下效果:
在DLL项目中,定义了符号( DLLIMPORT_EXPORT )。因此,DLLIMPORT_EXPORT将评估为 __ declspec(dllexport)。在使用DLL的C项目中,不会定义符号。当包含头文件时,Ergo,DLLIMPORT_EXPORT评估为 __ declspec(dllimport)。执行此操作将导入该功能,您将能够使用它。如果不这样做,将在尝试调用该函数时导致链接器错误(未解析的外部符号)。
希望这有帮助!
PS:您应该将头文件中不需要的所有#include移动到您的实现(CPP)文件中: - )