C ++ / CLI代码的基本设置,以便非托管C / ++

时间:2015-05-01 11:36:28

标签: visual-studio c++-cli

我正在尝试学习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。不幸的是,错误没有改变

1 个答案:

答案 0 :(得分:1)

您需要将应用程序(exe)项目与从dll项目构建的.lib链接起来。

您可以从项目设置中添加&gt;&gt;链接器&gt;&gt;输入文件或只是在源上添加一行。

即。

pragma(comment, "lib:<your_lib.lib>")