C++ DLL中的导出类在编译时会发出警告[重复]

Posted

技术标签:

【中文标题】C++ DLL中的导出类在编译时会发出警告[重复]【英文标题】:exporting class in C++ DLL gives warning while compiling [duplicate] 【发布时间】:2015-10-09 18:42:28 【问题描述】:

我在网上找到了一个 IPC 库,编译后它会变成“.lib”,所以我尝试将其转换为 DLL 而不是使用 .lib,但在声明导出功能后我需要导出 VS Express 编译器给出了一个警告声明

'PipeTransport::buf_': class 'std::vector>' 需要 > 有 dll 接口供类的客户端使用

EXPORT 定义

#define EXPORT __declspec(dllexport)

这是导出的代码...

class EXPORT PipeTransport : public PipeWin 
public:
  static const size_t kBufferSz = 4096;

  size_t Send(const void* buf, size_t sz) 
    return Write(buf, sz) ? ipc::RcOK : ipc::RcErrTransportWrite;
  

  char* Receive(size_t* size);

private:
  IPCCharVector buf_;//The Line giving error
;

图书馆链接是here

报错的头文件是here

我阅读了this,但由于我是 C++ 新手(完全是菜鸟),所以我不太了解它。

【问题讨论】:

如果你用谷歌搜索你的错误,答案会在第一个结果中返回。为什么我们必须为您搜索一些东西? 也许它显示了您所在位置的结果,谷歌没有在这里向我显示这个......而且,感谢您的建议......这正是我想知道的。 .. 实例化一个类...再次感谢 【参考方案1】:

导出类对象的C方式是这样的,但我不知道如何在DLL中导出类

Here your DLL
class AbstractClass

public:
    virtual void somefunction() = 0;


//Inherite from this class
class MyClass : public AbstractClass

    virtual void somefucntion()/*implement*/


//Create your export object
MyClass* myObject = NULL;

//Create some EXPORT define to make it easy when you declare function
#define EXPORT_DLL __declspec(dllexport)

//Declare function
extern "C" EXPORT_DLL void* myExportedFunction ();

//Implement
EXPORT_DLL void* myExportedFunction ()

    if(myObject == NULL)
        myObject = new MyClass();
    return myObject;

现在你可以从你的函数外部调用这个函数。当然你需要加载你的dll,你的函数和其他东西,这里我只是通过这些步骤,只告诉你如何使用这个代码。

//You must have a declaration of your abstract class in exterior of dll
AbstractClass* dllObjet = NULL;

dllObject = myExportedFunction()

//And now you can use it
dllObject->somefucntion();

【讨论】:

错了。您可以从 DLL 中导出类。 哦,我的错,我一直认为这是不可能的,我看了谷歌,你是对的,对不起,我修改了我的答案 如果我不需要这些课程怎么办?我应该按照这种方法来简化函数名而不是所有这些 :: Class 位吗?

以上是关于C++ DLL中的导出类在编译时会发出警告[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在c#中使用C++ dll导出类[重复]

如何导出 C# dll 方法/函数以在 C++ 中使用它 [重复]

在 Microsoft Visual C++ 2015 中编译 DLL——警告 C4251 需要有 dll 接口才能被类的客户端使用——使用 Boost 时?

C++ Visual Studio 2010 C4717 编译器在代码的一部分中发出警告,但在另一部分中没有

从 C++ dll 编组导出的字符串向量

如何隐藏 DLL 中的导出函数