This question already has an answer here:
Lib and DLL linking to an exe error “cannot read at 0x300”

(1个答案)


6年前关闭。




我试图在C++中制作一个简单的HelloWorld DLL,以使第一次使用C++ DLL变得如虎添翼。但是,当我尝试构建包含我的方法的项目时,总是会收到error LNK1107: invalid or corrupt file: cannot read at 0x2B8 C:\Users\octavio\Documents\Visual Studio 2013\Projects\UseOfDll\UseOfDll\HelloWorldDll.dll错误。

在我的UseOfDll项目中,我将C:\Users\octavio\Documents\Visual Studio 2013\Projects\UseOfDll\UseOfDll\HelloWorldDll.dll添加到Project > UseOfDll Properties > Linker > Input > Additional Dependecies中。我还将HelloWorldDll.dllHelloDll.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;
}

最佳答案

解决方案:将class HelloDll替换为class DLLDIR HelloDll
这会将类链接到DLL导出库。

关于c++ - 错误LNK1104将.dll链接到Visual Studio中的应用程序 “invalid or corrupt file” ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23814344/

10-13 06:03