标签: dllexport

在Visual Studio中自动生成DLL .DEF文件?

有没有办法在Visual Studio中自动生成DLL的DEF文件?我以前总是手动创建它们,但是必须有一个更简单的方法.

dll dllexport visual-studio

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

如何在C#应用程序中使用DllExport C++类

我创建了一个包含类"myCppClass"的C++ Dll项目,并尝试使用以下代码将其导出:如下所述:http://msdn.microsoft.com/en-us/library/a90k134d( v = vs. 80)的.aspx

class __declspec(dllexport) CExampleExport : //public CObject
{ ... class definition ... };
Run Code Online (Sandbox Code Playgroud)

我省略了"public CObject",因为它需要afx.h并暗示它是一个MFC Dll.我不确定这是否是好事但它与DLL项目默认设置不同.

从上面链接的文档中我可以相信所有"公共函数和成员变量"都可以导入.我如何在C#中实现这一目标?可以简单地实例化该类吗?

编辑:我刚刚意识到帖子的标题可能会产生误导.重点应放在C#的DllImporting上,并确保我在C++中正确地遵循了文档

c# c++ dll dllimport dllexport

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

__declspec(dllimport)如何加载库

http://msdn.microsoft.com/en-us/library/9h658af8.aspx

MSDN说我可以从库中导出函数__declspec(dllexport)但是如何在我的可执行文件中加载这个库?

我在DLL中有一个导出的函数:

 __declspec(dllexport) void myfunc(){}
Run Code Online (Sandbox Code Playgroud)

现在我想在我的可执行文件中使用它:

 __declspec(dllimport) void myfunc(void);
Run Code Online (Sandbox Code Playgroud)

但是我的程序将如何知道在哪里找到这个功能?

c++ dll dllexport

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

将dll方法从C++导出到C#.为什么我需要:"extern"C""

在我的DLL中有一个我想要导出的方法.

//作品:

extern "C" __declspec(dllexport)
Run Code Online (Sandbox Code Playgroud)

//不会工作

__declspec(dllexport)
Run Code Online (Sandbox Code Playgroud)

C++导出:

 extern "C" __declspec(dllexport) int Test();
Run Code Online (Sandbox Code Playgroud)

C#import:

[DllImport("CircleGPU2_32.DLL", EntryPoint = "Test", 
    CallingConvention = CallingConvention.StdCall)]
public static extern int Test();
Run Code Online (Sandbox Code Playgroud)

为什么我需要外部"C"

c# c++ dllexport

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

没有导出函数的DLL?

我在MS-Office DLL中窥探了一下,我发现有些DLL没有任何导出功能.我不太明白,应用程序如何在没有导出任何功能的情况下使用这些DLL?

我的意思是,dllmain()确实在LoadLibrary()上执行,但最重要的是什么?为什么有人会创建没有导出函数的DLL?

谢谢!:-)

c++ dll dllexport

10
推荐指数
1
解决办法
3410
查看次数

构建64位dll的警告

DLL导出标题

extern "C"
void _declspec(dllexport) __stdcall foo();
Run Code Online (Sandbox Code Playgroud)

.def文件

EXPORTS
foo         @1
Run Code Online (Sandbox Code Playgroud)

当我通过64位构建配置构建dll时,我遇到了这个警告.

警告LNK4197:多次指定导出'foo'; 使用第一个规范

但是,如果我通过32位构建配置构建dll,则警告永远不会发生.
问题是什么?有什么不同.

在接口的dll头文件中,我们通常使用这个技术,

#ifdef EXPORT_DLL
#define BASICAPI _declspec(dllexport)
#else
#define BASICAPI _declspec(dllimport)
#endif //_EXPORT_DLL
Run Code Online (Sandbox Code Playgroud)

但是如果def文件也存在,我们总是会在构建64位dll时遇到警告.
那么,我们应该写这样的代码吗?

#ifdef EXPORT_DLL
#define BASICAPI
#else
#define BASICAPI _declspec(dllimport)
#endif //_EXPORT_DLL
Run Code Online (Sandbox Code Playgroud)

它运作良好.但这对我来说并不熟悉.
给我你的意见.

windows dll dllimport dllexport visual-studio

9
推荐指数
2
解决办法
3831
查看次数

无法导出模板功能

我有一个名为"SimObject"的类:

namespace simBase
{
    class __declspec(dllexport) SimObject: public SimSomething
    {
        public:

            template <class T>
            void updateParamValue( const std::string& name, T val );
    }
}
Run Code Online (Sandbox Code Playgroud)

我有另一个名为"ITerrainDrawable"的类:

namespace simTerrain
{
    class __declspec(dllexport) ITerrainDrawable : public simBase::SimObject
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

这些类位于不同的库中.SimObject在simBase中,ITerrainDrawable在simTerrain库中.即使ITerrainDrawable派生自SimObject并且我包含了simBase库,我也会收到链接错误:

未解决的外部符号

1>ITerrainDrawable.obj : error LNK2019: unresolved external symbol "public: void __thiscall simBase::SimObject::updateParamValue<float>(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,float)" (??$updateParamValue@M@SimObject@simBase@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@M@Z) referenced in function "public: void __thiscall simTerrain::ITerrainDrawable::setTerrainSize(float)" (?setTerrainSize@ITerrainDrawable@simTerrain@@QAEXM@Z)
1>ITerrainDrawable.obj : error LNK2019: unresolved external symbol "public: void __thiscall simBase::SimObject::updateParamValue<class osg::Vec4f>(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> …
Run Code Online (Sandbox Code Playgroud)

c++ templates dllexport

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

如何解决冲突的链接器依赖项?

如果我有两个图书馆,A.libB.lib,这两个出口foobar,我怎么知道使用符号链接fooA.lib和符号barB.lib

c linker dllexport visual-c++

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

C++动态地将任意函数从DLL加载到std :: function中

如何使用单个函数将任意动态链接库(dll)函数加载到std::function对象中?

例如,我想将两个函数编译成一个dll:

// test.dll

int plusFive(int value) {
    return value + 5;
}

void printHello() {
    std::cout << "Hello!" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

并在运行时使用以下单个函数加载它们:

// main.cc

#include <functional>

int main() {
    std::function<int(int)> func1(loadDllFunc("test.dll", "plusFive"));
    std::function<void()> func2(loadDllFunc("test.dll", "printHello"));
}
Run Code Online (Sandbox Code Playgroud)

c++ dll dllexport c++11 std-function

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

如何将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万
查看次数

标签 统计

dllexport ×10

c++ ×7

dll ×6

visual-studio ×3

c# ×2

dllimport ×2

c ×1

c++11 ×1

class ×1

linker ×1

std-function ×1

templates ×1

visual-c++ ×1

windows ×1