0

重複の可能性:
C++ インターフェイスを介してクラス全体をエクスポートする

このチュートリアルから始めて、.dll ビルダーと .exe ビルダーの 2 つのプロジェクトを使用して独自の VS ソリューションを作成しようとしました。.dll プロジェクト ヘッダーは次のとおりです: libheader.h

#pragma once
 
#ifdef SHREDLIB_EXPORTS
#define SHREDAPI __declspec(dllexport)
 
#else
#define SHREDAPI __declspec(dllimport)
 
#endif

struct IShred
{
    virtual int GetStringSize(char*) = 0;
    virtual void Release() = 0;
};

// Handle type. In C++ language the iterface type is used.
typedef IShred* SHREDHANDLE;

#ifdef __cplusplus
#   define EXTERN_C     extern "C"
#else
#   define EXTERN_C
#endif // __cplusplus


EXTERN_C
SHREDAPI 
SHREDHANDLE 
WINAPI 
GetShred(void);

libheader.cpp

#include libheader.h
class IShredLib: public IShred {
    int GetStringSize(char*);
    void Release();
};

int IShredLib::GetStringSize(char* s)
{
    return strlen(s);
}
void IShredLib::Release()
{
    delete this;
}
#pragma comment(linker, "/export:GetShred=_GetShred@0")
SHREDAPI SHREDHANDLE APIENTRY
GetShred()
{
    return new IShredLib;
}

これは main.cpp exe プロジェクトにあります。

#include "libheader.h"
 
#include <conio.h>
#include <stdio.h>
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
    IShred* itf = ::GetShred();
     
     
    _getch();
    return 0;
}

なぜ私はこれを得るのですか? エラー 1 エラー LNK2001: 未解決の外部シンボル __imp__GetShred@0 また、SHREDLIB_EXPORTS を VS .dll プロジェクト プロパティで定義されている C++ プリプロセッサとして定義しました。

4

0 に答える 0