将.dll链接到Visual Studio中的测试应用程序时出错“LNK1104”;无效或损坏的文件“; 我试图在C++中制作一个简单的HeloWord DLL,以首次使用C++ DLL来实现。但是,当我尝试构建包含我的方法的项目时,总是会出现错误错误LNK1107:无效或损坏的文件:无法在0x2B8读取C:\Users\octavio\Documents\Visual Studio 2013\Projects\UseOfDll\UseOfDll\helloworldll.dll

将.dll链接到Visual Studio中的测试应用程序时出错“LNK1104”;无效或损坏的文件“; 我试图在C++中制作一个简单的HeloWord DLL,以首次使用C++ DLL来实现。但是,当我尝试构建包含我的方法的项目时,总是会出现错误错误LNK1107:无效或损坏的文件:无法在0x2B8读取C:\Users\octavio\Documents\Visual Studio 2013\Projects\UseOfDll\UseOfDll\helloworldll.dll,c++,dll,linker,visual-studio-2013,C++,Dll,Linker,Visual Studio 2013,在我的UseOfDll项目中,我将C:\Users\octavio\Documents\visualstudio 2013\Projects\UseOfDll\UseOfDll\helloworldll.dll添加到project>UseOfDll属性>链接器>输入>其他依赖项中。我还将HelloWorldDll.dll和HelloDll.h添加到UseOfDll项目目录中 这是使用DLL的程序(称为UseOfDll)的主要方法: // UseOfDll.cpp ----------------

在我的
UseOfDll
项目中,我将
C:\Users\octavio\Documents\visualstudio 2013\Projects\UseOfDll\UseOfDll\helloworldll.dll
添加到
project>UseOfDll属性>链接器>输入>其他依赖项中。我还将
HelloWorldDll.dll
HelloDll.h
添加到
UseOfDll
项目目录中

这是使用DLL的程序(称为
UseOfDll
)的主要方法:

// UseOfDll.cpp ----------------------------------------------------

#include "stdafx.h"
#include "HelloDll.h"

int _tmain(int argc, _TCHAR* argv[]) {
    HelloDll helloDll;
    helloDll.hello();
    HelloDll::helloStatic();
    getchar();
    return 0;
}
在DLL的单独Visual Studio项目中,我有:

// HelloDll.h ------------------------------------------------------

#pragma once

#ifdef DLLDIR_EX
    #define DLLDIR  __declspec(dllexport)   // export DLL information
#else
    #define DLLDIR  __declspec(dllimport)   // import DLL information
#endif 

class HelloDll {
    public:
        HelloDll();
        ~HelloDll();
        void hello();
        static void helloStatic();
};

// HelloDll.cpp ----------------------------------------------------

#include "stdafx.h"
#include "HelloDll.h"
#include <iostream>
using namespace std;

HelloDll::HelloDll() {}


HelloDll::~HelloDll() {}

void HelloDll::hello() {
    cout << "Hello World of DLL" << endl;
}

void HelloDll::helloStatic() {
    cout << "Hello World of DLL static" << endl;
}
//HelloDll.h------------------------------------------------------
#布拉格语一次
#ifdef DLLDIR_EX
#定义DLLDIR\uu declspec(dllexport)//导出DLL信息
#否则
#定义DLLDIR\uu declspec(dllimport)//导入DLL信息
#恩迪夫
类HelloDll{
公众:
Hellodell();
~HelloDll();
void hello();
静态空洞helloStatic();
};
//HelloDll.cpp----------------------------------------------------
#包括“stdafx.h”
#包括“HelloDll.h”
#包括
使用名称空间std;
HelloDll::HelloDll(){}
HelloDll::~HelloDll(){}
void HelloDll::hello(){

cout解决方案:将
class-HelloDll
替换为
class-DLLDIR-HelloDll

这会将类链接到DLL导出库。

这是一个标准错误,您无法链接DLL。它没有足够的信息让链接器执行正确的工作。链接器在无法理解文件内容时会崩溃。您必须链接DLL的导入库。您的类未被导出,请放置\u declspec(dllexport)在您的课堂上definition@Matt在
#ifdef DLLDIR_EX
之后的一行中没有这个吗?@roscioli,没有,那只是一个宏定义。@HansPassant是导入库
.lib
文件?我是否应该将
.lib
文件添加到链接器>输入>附加依赖项,而不是
.dll
文件)?最后,当我编译我的DLL项目时,我没有得到
.lib
文件。我是否配置了错误的东西?