问题标签 [dllexport]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
visual-studio-2010 - 在 VS2010 (CUDA) 中导出 DLL 的问题
我在构建 DLL 解决方案时遇到了麻烦。我正在制作用于 LabVIEW 2010 的 DLL,以便具有 CUDA 功能。但是,我要导出的每一个函数都出现链接器错误 LNK2019。
我已经将构建自定义更改为 CUDA 4.0,因此所有库都包含在依赖项中。但是,我仍然收到以下错误:
1>LVCUDA.obj:错误 LNK2019:未解析的外部符号 _cufftPlan2d@16 在函数 _LVcufftPlan2D 中引用
当我尝试构建解决方案时。
我想知道我还缺少什么导致链接器不断抛出未解决的外部符号错误。
从 CUDA 生成的自动命令行是:
/OUT:"C:\VC Projects\CUDA\Debug\CUDA.dll" /INCREMENTAL /NOLOGO /LIBPATH:"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\bin" /LIBPATH:"C :\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\lib\x64" /LIBPATH:"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\lib\Win32" /DLL "cudart. lib” “kernel32.lib” “user32.lib” “gdi32.lib” “winspool.lib” “comdlg32.lib” “advapi32.lib” “shell32.lib” “ole32.lib” “oleaut32.lib” “uuid. lib" "odbc32.lib" "odbccp32.lib" /MANIFEST /ManifestFile:"Debug\CUDA.dll.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB: “C:\VC 项目\CUDA\调试\CUDA。pdb" /SUBSYSTEM:WINDOWS /PGD:"C:\VC Projects\CUDA\Debug\CUDA.pgd" /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE
c++ - 从 C++ DLL 中获取函数名称
我将函数声明为__declspec(dllexport) void TakeInput();
具有此功能的 DLL 在 C# 中导出。我在执行对该函数的函数调用时失败,因为在 c# 代码中找不到入口点。
谷歌搜索显示问题是没有提供正确的入口点。我需要为此函数提供错误名称。
所以我想知道我怎样才能得到这个函数的名字?
c++ - 没有导出函数的DLL?
我在 MS-Office DLL 中窥探了一点,我注意到一些 DLL 没有任何导出函数。我不太明白,应用程序如何在不导出任何函数的情况下使用这些 DLL?!
我的意思是,dllmain() 确实在 LoadLibrary() 上执行,但有什么意义呢?为什么有人会创建一个没有导出函数的 DLL?
谢谢!:-)
c# - 从托管项目加载时,如何逐步执行非托管 DLL 中的方法?(Visual C++/C#)
我有一个包含 3 个项目的 Visual Studio 2010 解决方案。第一个是我用几个 DLL 导出编写的非托管 DLL 项目 (C++)。第二个项目是第一个项目的托管包装器(使用 DLLImport 的 C#)。最后一个项目是我用来测试第一个项目功能的 WPF 应用程序。
我通过在构建后步骤中将 DLL 复制到包装器的发布/调试文件夹来使用第一个项目。但是,这还不足以让我在调试器中逐步完成它。我不知道如何正确引用项目,以便为非托管 DLL 加载调试符号。我该怎么做?
c++ - 包装 C++ 模板,以便它们可以在 C#、Java 等中使用
我有一个.lib
严重依赖模板的 C++ 库 ()。我正在为这个库创建一个 C++ 包装器,以便在.dll
. 这些公开的函数将依次被 Java 和 C# 库分别通过 JNA/JNI 和 PInvoke 使用。
我从这个 SO question中了解到,无法导出模板。
是否有人对包装 C++ 模板的最佳方式有很好的指导,以便保留尽可能多的灵活性,但可以导出?
例如,典型的 C++ 函数如下所示:
c++ - C++ - 类方法不会从 dll 导出(VS - win)
我在C++
dll 类型的 Visual Studio 中创建了示例项目。它包含头文件SqlLtDb.h
:
并且在SqlLtDb.cpp
方法中实现如下(我只展示了两个实现):
SqlLtDb.def
文件看起来像这样:
SqlLtDb.lib 文件由 LIB 命令生成,使用上面的 .def 文件。这是我的 SqlLtDb.dll 文件。
现在我想将此文件包含到我的 consoleApplication 应用程序中。ConsoleApplication 在 VS 2008 中。我设置了:
Properties->Configuration Properties->Linker->Input->Additional Dependencies : SqlLtDb.lib;
Properties->Configuration Properties->Linker->General->Additional Library
Directories: E:\PM\SqlLtDb\Release;
运行时库设置为:多线程调试 DLL (/MDd)(我没有更改它)。
我将 files: 复制SqlLtDb.dll, SqlLtDb.lib, SqlLtDb.def, sqlite3.dll
到生成的 Debug 文件夹中consoleApplication.exe
。我将文件添加到存储源文件的SqlLtDb.h
文件夹中。consoleApplication's
函数 mainconsoleApplication
如下所示:
当我编译这段代码时,我得到错误:
方法getInstanceCSblLtDb
导出成功,但问题出在类的导出方法上。我不会导出所有类,最好是导出指向类的指针。
谢谢
macos - 在 Mac OSX 上导出 DLL 函数的正确方法
我正在尝试在 Mac OS X 10.6 上编译一个简单的 DLL,并且对声明 DLL 提供给全世界使用的函数的正确方法感到困惑。遵循来自可靠来源的示例代码,我想出了:
但是 gcc barfs 就可以了。示例代码实际拥有的是 MACPASCAL 和 DLLExport,我认为它们是宏。我浏览了#defines 的示例代码、SDK 等,并插入了我发现的内容。这些定义可能被隐藏在#ifs 中,所以我发现的并不是好的和真实的。不合逻辑的是,如果我只是做显而易见的事情并使用 DLLExport 和 MACPASCAL,编译器也会出错,所以这不是解决方案。
使应用程序可以使用 DLL 函数的正确方法是什么?
c# - 从 C# 调用 dll 函数时的 PInvokeStackImbalance
我正在编写一个 WPF 应用程序,该应用程序需要调用我编写的 dll 中存在的一些 C++ 代码。我总是遇到 PInvokeStackImbalance 错误,即使是最基本的测试功能也是如此。例如,在 C++ dll 中:
该函数什么都不做。c# 端如下所示:
我这样称呼这个 c# 函数:
测试(1)
...我得到一个 PInvokeStackImbalance !怎么会这样?
提前致谢...
汤姆
mfc - Visual Studio 2005 + MFC:链接器错误,即使导出也无法与构造函数链接
我有两个 MFC 项目,一个 exe 和一个 dll。exe引用dll。我通过从 exe 项目中提取一些类来创建 dll,这是我的起点。
dll 现在可以构建,但 exe 无法与 dll 的类之一的构造函数链接。我尝试 __declspec(dllexport)'ing 整个班级,但这给了我太多警告,所以我改为 __declspec(dllexport)'ed 所有公共成员。这解决了大多数链接错误,除了构造函数。
错误(MsgBoxTest 是 exe,CustomMessageBoxDlg 是 dll):
构造函数声明(重载):
错误引用的构造函数用法:
我尝试了 Clean + Build,但没有雪茄
编辑:该类使用 DECLARE_DYNAMIC 和 IMPLEMENT_DYNAMIC 宏,并扩展 CDialog
visual-c++ - MSVC 未解析的外部符号链接可执行文件
我有两个现有的可执行文件 A 和 T,在同一个解决方案中,在我接触它们之前它们都运行得很好。在可执行文件 A 中有一个定义类 P 的头文件,以及一个静态实例 MyP 的原型。定义在项目 A 中编译。在可执行文件 T 中,我想在项目 A 中调用 MyP 的成员函数,因此我将 dllimport/export 宏添加到标题中的类和 MyP 的声明中(而不是在定义中),并且包含项目 T 中的标头。dllimport/export 宏是标准的,并且 A_EXPORTS 在项目 A 中定义,但在 T 中没有定义。
我在解决方案中添加了项目 A 作为对项目 T 的依赖项。A 仍然可以正常编译,但 Tunresolved external symbol "__declspec(import) <snip> referenced in function <snip>
为函数调用和unresolved external symbol "__declspec(dllimport) class P MyP" <snip>
静态对象提供了。我还在输出日志中看到,就在它开始链接之后:Creating library Debug/A.lib and object Debug/A.exp
这似乎是不祥的,因为它应该链接到现有的可执行文件。
我的问题是:我如何告诉 MSVC 2010 那些在哪里?我认为只需将 A 设置为依赖项就会让它自动解决。我可以链接到现有的可执行文件,对吧?