0

企業から提供されたC++ライブラリを使用したいと考えています。.lib と .h ファイルしかありません。統一して使いたいです。だから私はDLLが必要です。したがって、 .lib で必要な関数にアクセスできるようにする DLL を作成したいと考えています。

そのために、ライブラリから必要な関数を呼び出す c++ ファイルを使用して、ビジュアル スタジオの c++ DLL プロジェクトを作成しました。.lib は、リンカー/入力/追加の依存関係でビジュアル スタジオにリンクされています。

簡単にするために、ユニティではなく通常の C++ ファイルから DLL の関数を呼び出そうとしています。

私のテストファイルは次のようになります:

#include <windows.h>
#include <iostream>

void CallMyDLL(void)
{
 HINSTANCE hGetProcIDDLL = LoadLibrary("C:\\path\\museDLL.dll");
 FARPROC lpfnGetProcessID = GetProcAddress(HMODULE (hGetProcIDDLL),"startConnection");
   typedef void (__stdcall * pICFUNC)();
   pICFUNC startConnection;
   startConnection = pICFUNC(lpfnGetProcessID);

  //std::cout << test<< std::endl;

  startConnection(); 

  FreeLibrary(hGetProcIDDLL);

}
int main () {
CallMyDLL();
}

私のメインDLLファイルは次のようになります:

#include "dllmain.h"  
#include <iostream>
#include <fstream>
#include "main_muse.h"
namespace museDLL
{
    MainPage* mp;
      void startConnection()
    {
           mp = new  MainPage();
    }

    double getValue()
    {   
        return mp->getValueEEG();
    }

    double test()
    {
        return 1.2f;
    } 

}

dllmain.h

#pragma once  

#ifdef DLL_EXPORTS  
#define DLL_API __declspec(dllexport)   
#else  
#define DLL_API __declspec(dllimport)   
#endif  

namespace museDLL
{
    extern "C" {
        DLL_API void __cdecl startConnection();
        DLL_API double __cdecl getValue();
        DLL_API double __cdecl test();

    }
}

DLL でテスト関数を呼び出すと、機能します。ただし、元の .lib の関数を使用する startConnection 関数を呼び出すと、クラッシュします (エラー メッセージは表示されません)。

明確にするために、テストファイル->カスタムDLLの呼び出し->ダウンロードした.libの呼び出しが必要です。

私が間違っていることを理解していませんか?

初期の .lib は .DLL に含まれているのでしょうか、それともリンクする必要があるのでしょうか?

4

1 に答える 1