我正在尝试学习C ++ / CLI,计划编写一个将由(非托管)C代码使用的DLL。但是,我无法获得最基本的构建示例,如下所示:
我在Visual Studio Express 2013中工作。
创建新项目 - > CLR - >类库
LearnCli.h:
extern "C" __declspec(dllexport)
int __stdcall TestFunc();
LearnCli.cpp:
#include "stdafx.h"
#include "LearnCli.h"
int __stdcall TestFunc()
{
return 3;
}
构建没有问题。
添加项目 - > Win32 - >控制台应用程序
从解决方案资源管理器中的上下文菜单中为新控制台项目:
添加 - >参考 - > LearnCli
stdafx.h中
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
// TODO: reference additional headers your program requires here
#include "..\LearnCli\LearnCli.h"
ConsoleApplication.cpp
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int z;
z=TestFunc();
cout << "Function returns:" << z << endl;
cin.get();
return 0;
}
intellisense没有问题,但在构建时:
Error 1 error LNK2019: unresolved external symbol _TestFunc@0 referenced in function _wmain [path]\Projects\LearnCli\ConsoleApplication1\ConsoleApplication1.obj ConsoleApplication1
我错过了哪些不允许win32控制台应用程序找到该功能?欢呼声。
感谢评论和链接,我已将LearnCli.h文件更改为
#ifdef LEARNCLIAPI_EXPORTS
#define LearnCliApi_DECLSPEC __declspec(dllexport)
#else
#define LearnCliApi_DECLSPEC __declspec(dllimport)
#endif
转到Project - &gt;属性 - &gt; C / C ++ - &gt;预处理器 - &gt;定义 并添加了LEARNCLIAPI_EXPORTS。不幸的是,错误没有改变
答案 0 :(得分:1)
您需要将应用程序(exe)项目与从dll项目构建的.lib链接起来。
您可以从项目设置中添加&gt;&gt;链接器&gt;&gt;输入文件或只是在源上添加一行。
即。
pragma(comment, "lib:<your_lib.lib>")