在C ++程序中实现DLL有问题

时间:2015-12-17 05:25:05

标签: c++ visual-studio dll

我是C ++新手,并被要求检索和处理来自质谱设备的数据。我得到了一些DLL库和他们的文档来执行此操作。这些库及其文档可以通过在这里与Thermo Fisher进行交流来找到:

https://thermo.flexnetoperations.com/control/thmo/RegisterMemberToAccount

软件包是MSFileReader 3.0。文档本身可以在这里查看:

http://www.thermoscientific.de/content/dam/tfs/ATG/CMD/cmd-documents/oper/oper/ms/lc-ms/soft/Man-XCALI-97542-MSFileReader-30-Ref-ManXCALI97542-A-EN.pdf

我有64位版本的软件。我正在使用MS Visual Studio Community 2015.我选择使用运行时术语。我的代码如下。

#include <Windows.h>
#include <iostream>
#include <string>
int main()
{
    HINSTANCE hInst = LoadLibrary(L"C:\\Nathan\\C++\\GetEvenOdd\\Debug\\XRawfile2_x64.dll");
    if (!hInst)
    {
        std::cout << "\ncould Not Load the Library" << std::endl;
        return EXIT_FAILURE; 
    }
    else
    {
        std::cout << "\nSuccess" << std::endl;
    }
    //Resolve the function address 
    FreeLibrary(hInst);
    return EXIT_SUCCESS;
}

令我困惑的是,当LoadLibrary()内的路径设置为我创建的另一个DLL时,程序指示加载成功;当我尝试加载XRawfile2_x64.dll时,程序返回&#34;无法加载库&#34;。编译时,VS返回以下内容。

1>------ Build started: Project: Loader, Configuration: Debug Win32 ------
1>  Source.cpp
1>  Loader.vcxproj -> C:\Nathan\C++\Loader\Debug\Loader.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

我创建的DLL如下。 标题 -

#ifndef EVENODD_H_
#define EVENODD_H_
#include <string>
class EvenOdd
{
public:
    std::string CheckEvenOdd(const int iNum);
};

#endif //EVENODD_H_

源文件 -

#include "EvenOdd.h"

extern "C"
{
    __declspec(dllexport) std::string CheckEvenOdd(const int iNum)
    {
        std::string strRes = "NULL";
        if (iNum % 2 == 0)
        {
            strRes = "The given number is Even";
        }
        else {
            strRes = "The given number is Odd";
        }

        return strRes;
    }
}

根据这些信息,我如何加载MSFileReader包中包含的DLL文件?

1 个答案:

答案 0 :(得分:0)

Visual Studio中的默认设置是构建32位应用程序。您无法从32位应用程序加载64位DLL。将您的构建配置更改为目标&#39; x64&#39;平台。这是你如何做到这一点:

  1. 打开项目属性
  2. 点击&#34;配置管理器&#34;
  3. 在&#34;平台&#34;列中,添加一个新条目&#34; x64&#34; (从Win32平台配置复制设置)