相关疑难解决方法(0)

如何安全地将对象(尤其是STL对象)传入DLL或从DLL传递?

如何将类对象(尤其是STL对象)传递给C++ DLL?

我的应用程序必须以DLL文件的形式与第三方插件交互,我无法控制这些插件构建的编译器.我知道STL对象没有保证ABI,我担心我的应用程序会导致不稳定.

c++ windows dll stl abi

99
推荐指数
4
解决办法
3万
查看次数

C++/CLI混合模式DLL创建

我有一个本机C++ DLL,我希望有一个C++/CLI包装层.根据我的理解,如果你简单地将C++/CLI类添加到项目中,VS将编译为混合模式,但我显然是错误的,因为VS似乎甚至没有触及托管代码.

所以,对于一个已经存在的本地代码库什么究竟,一步一步的,你需要做的,创建一个混合模式DLL,这样我可以从任何.NET语言链接到该代码?

*我需要这样做,因为我的本机代码使用我无法P/Invoke进入的C++类.

.net mixed-mode interop c++-cli

14
推荐指数
3
解决办法
2万
查看次数

从DLL动态导入C++类

从DLL导入C++类的正确方法是什么?我们正在使用Visual C++.

有dllexport/exports.def + LoadLibrary + GetProcAddress三连胜,但它不适用于C++类,只适用于C函数.这是由于C++名称错误吗?我该如何工作?

c++ windows import dll

13
推荐指数
2
解决办法
2万
查看次数

将非托管C++ DLL与托管C++类库DLL链接

创建简单的c ++ .net包装器的问题中.一步步

我想在.NET中使用C++类,但我在使用Visual Studio(2008)构建时遇到了问题.

我有一个非托管类A(使用/ clr编译的C++).我创建了一个C++/clr类'Class1',它将A和匹配的方法委托包装到A的方法中.

如果我在Class1(托管)的类库项目中包含A类的单元源文件我没有问题所有链接和工作正常,但我有很多非管理的C++类,如A和我想把它们放在DLL中并链接到DLL到托管库(类包装器).[我实际上并不认为此时需要将这些DLL链接在一起,但编译器似乎需要它,给出下面显示的相同错误.]

我创建了VisualC++/CLR/Class库并添加了我的C++类(下面列出的A)并构建.[我使用了默认设置,但是在项目链接器设置中我已经尝试使用"是"和"否"注册输出.]没有错误,并且创建了.DLL文件.

我创建了VisualC++/CLR/Class库并创建了包装类'Class1'我使用了所有默认设置.在项目属性下,我单击了"引用""添加新引用"并选择了第一步中创建的DLL.

我收到链接器错误:

test_NET_library.obj : error LNK2028: unresolved token (0A000009) "public: int __thiscall Z::A::m1(int,int)" (?m1@A@Z@@$$FQAEHHH@Z) referenced in function "public: int __clrcall test_NET_library::Class1::m1(int,int)" (?m1@Class1@test_NET_library@@$$FQ$AAMHHH@Z)
test_NET_library.obj : error LNK2028: unresolved token (0A00000A) "public: int __thiscall Z::A::m2(int,int)" (?m2@A@Z@@$$FQAEHHH@Z) referenced in function "public: int __clrcall test_NET_library::Class1::m2(int,int)" (?m2@Class1@test_NET_library@@$$FQ$AAMHHH@Z)
test_NET_library.obj : error LNK2019: unresolved external symbol "public: int __thiscall Z::A::m1(int,int)" (?m1@A@Z@@$$FQAEHHH@Z) referenced in function "public: int __clrcall test_NET_library::Class1::m1(int,int)" (?m1@Class1@test_NET_library@@$$FQ$AAMHHH@Z)
test_NET_library.obj : error LNK2019: unresolved external symbol "public: …
Run Code Online (Sandbox Code Playgroud)

mixed-mode c++-cli

8
推荐指数
1
解决办法
2万
查看次数

如何将C++类导出为dll?

我来自C#/ Java背景,所以我试图弄清楚如何创建一个行为类似于C#dll的C++ DLL.

我曾尝试用__declspec(dllexport)__declspec(dllimport),但我只设法得到它的静态方法的工作.我确信这是由于我的理解有限.

如何在C++中导出类(完整地包括私有成员)并能够像引用C#一样在引用端实例化它们?一些指向在线资源/教程的指针也会这样做.

我开始使用MFC DLL模板,老实说,我不知道它们中有90%是什么,为什么我继承CWinApp.我试图标记该类,CCppPracticeLibraryApp但它将不再编译.

// CppPracticeLibrary.h : main header file for the CppPracticeLibrary DLL
//


#pragma once

#ifndef __AFXWIN_H__
    #error "include 'stdafx.h' before including this file for PCH"
#endif

#include "resource.h"       // main symbols

#ifdef CCppPracticeLibraryApp_EXPORTS
#define CCppPracticeLibraryApp_API __declspec(dllexport) 
#else
#define CCppPracticeLibraryApp_API __declspec(dllimport) 
#endif

// CCppPracticeLibraryApp
// See CppPracticeLibrary.cpp for the implementation of this class
//

class CCppPracticeLibraryApp : public CWinApp
{
public:
    CCppPracticeLibraryApp();
    static CCppPracticeLibraryApp_API void SayHelloWorld();
// Overrides
public: …
Run Code Online (Sandbox Code Playgroud)

c++ class dllexport visual-studio

8
推荐指数
2
解决办法
1万
查看次数

在每个公共方法之前使用 __declspec(dllexport)`

我正在 VS2017 中的 C++ 工作区中工作,工作区中有两个项目:一个实用程序项目和一个使用该实用程序项目的主项目。

在我向实用程序项目添加新类(“.h”和“.cpp”文件)后,我注意到虽然我在代码中进行了更改,但“.lib”文件在构建时不会被重写,除非我更改声明包含 的方法__declspec(dllexport)。看来我必须添加此声明,否则,派生的问题是主项目当然存在链接错误。

有没有更优雅的方法来做到这一点,而不是__declspec(dllexport)在每个公共方法的声明之前添加,如下面的代码所示?

public:
    __declspec(dllexport) MyProperty(const std::string &csvLine);
    __declspec(dllexport) bool getIsActive();
    __declspec(dllexport) std::string getFormatting();
    __declspec(dllexport) PropertyType getType();
Run Code Online (Sandbox Code Playgroud)

c++ dynamic-linking dllexport

4
推荐指数
1
解决办法
778
查看次数