问题标签 [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.

0 投票
2 回答
2701 浏览

dllimport - 未解析的外部符号

我在解决方案中有两个 WIN32 DLL 项目,main.dll 应该调用 mgn.dll 中的一个函数。

mgn.dll 有 mgn.h 头文件:

和 mgn.cpp 源文件:

main.dll 从源文件之一调用 AttachMGN 函数:

mgn.dll 编译成功。main.dll 在 VS 文本编辑器中没有显示任何错误,我可以使用“转到定义”功能进行导航。但是在构建过程中出现错误:

错误 LNK2019:函数“bool __cdecl CreateClient(void)”(?CreateClient@@AW4XZ) 中引用的未解析的外部符号 __imp__AttachMGN

两个 DLL 都编译到同一个文件夹中。DependencyWalker 将函数 AttachMGN 显示为导出的。如果重要的话,主项目的依赖项设置为 Mgn 项目。

我相信我只是忽略了一些东西......

提前致谢。

0 投票
8 回答
6630 浏览

c# - 创建一个 C# DLL 并从非托管 C++ 中使用它

我有一个本机(非托管)C++ 应用程序(使用 wxWidgets 来获得它的价值)。我正在考虑用 C# 编写一个单独的工具应用程序,其中包含基于 winform 的对话框。将其中一些对话框放在单独的 DLL 中会很有用,因为我希望能够从我的 C++ 应用程序中使用它们。

但是我不知道要做到这一点需要多少混乱,是不是特别容易?

编辑

我不需要直接调用对话框函数。我只需要一种方法让我的 C++ 应用程序调用 C# DLL 中的 API 以传递数据,以及让 C# DLL 调用 C++ 应用程序中某种观察者/返回对象的方法。

例如来自 C++:

当用户在 C# 对话框中执行操作时,调用 pCSO 方法将数据传回 C++

所以我认为这几乎是一个原始的 C++/C# 通信问题。但是虽然我知道 C++ 和 C#,但我不知道 .net 本身是如何工作的。我知道 COM,但真的宁愿避免它,我怀疑与我一起工作的任何其他开发人员都知道它。

0 投票
3 回答
3904 浏览

c++ - C++ DLL-Linking UnResolved Externals

我正在处理一个相当大的Core项目,我正在尝试对其进行调整以使用我构建的 DLL 引擎,我遇到了一堆错误,例如:

未解析的外部符号“私有:静态类

当在 DLL 中包含来自 Core 的一些头文件时,该类通过 __declspec(dllexport) 导出,但任何具有静态成员的头文件都会抛出关于静态成员的大量错误。

这是一个相当大的项目,我不能完全删除我看到的每个静态类成员,这种事情有吗?

正在导入的类的基本示例:

为了清楚起见,我只想说明 m_someVar 是在类实现文件中定义/声明的(忘记这个术语)

0 投票
1 回答
458 浏览

c# - 如何将两个非托管 C++ 函数包装成两个托管 C# 函数?

我有两个非托管 C++ 函数,CompressDecompress. 参数和返回如下:

无符号字符* Compress(无符号字符*,整数)

无符号字符* Decompress(无符号字符*,整数)

其中所有 uchar 都是 uchar 数组。

有人可以帮我设计一种使用 Byte[] 数组而不是 unsigned char* 将这些转换为托管 C# 代码的方法吗?非常感谢你!

0 投票
2 回答
12847 浏览

dll - 静态函数的 DLL 导出

我有以下静态函数:

我可以在 DLL 中导出这个函数吗?如果是这样,怎么做?

谢谢,

麦克风

背景资料:

我这样做是因为原始源代码附带了一个旨在编译为静态 (.lib) 库的 VS 项目。为了使用 ctypes/Python,我将项目转换为 DLL。

我以 DLL 的形式启动了一个 VS 项目并导入了原始源代码。该项目构建到一个 DLL 中,但没有导出任何函数(包括上面列出的函数)(源代码中没有 dllexport 以及 DLL Export Viewer 等工具都证实了这一点)。我试图按照这里的一般建议(在标题中创建一个可导出的包装函数)无济于事......函数似乎仍然没有被导出。

0 投票
3 回答
4434 浏览

dllexport - 我正在导出 dll 但 GetProcAddress 返回 127 错误,如何解决?

0 投票
2 回答
1136 浏览

java - 用于 Java 的 VBA/excel 到 dll/exe

我有一个带有手动输入功能的 Excel 文件,它使用第三方的插件。我想在 Java 中使用 Excel 文件的功能。我可以想到两种方法:

  1. 在 VBA 或带有 Excel 参考的 VB 中编写函数代码,然后生成 .dll 或 .exe 文件供 Java 使用。

  2. 使用 jxl 将数据馈送到 Excel 文件(Excel 文件收到新数据时会自动更新吗?),然后每次从 Excel 文件中读取新结果。

我对 Excel 或 VBA 没有太多经验。我想知道哪种方法更可行更快。

0 投票
3 回答
1576 浏览

c++ - 从 DLL 导出 C++ 类

我在 Code Project 上看到了这篇文章,该文章讨论了使用抽象接口作为从 C++ DLL 导出整个类的替代方法,以避免名称损坏问题。作者Release()在他的接口定义中有一个方法,应该由用户调用以在使用后释放类对象的资源。为了自动调用此方法,作者还创建了一个类似的类,该类在删除对象之前std::auto_ptr<T>调用该方法。Release()

我想知道以下方法是否可行:

当然,GetXyz()可以是在头文件中定义的全局函数而不是#define. 这种方法的优点是我们不需要自己制作auto_ptr调用该Release()方法的派生词。

谢谢你的回答,阿什。

0 投票
1 回答
299 浏览

c++ - 使用指向显式加载的 DLL 函数的静态指针创建一个类

我想要一个 DLLInterface 类的多个实例,但由于每个对象都有指向相同 DLL 函数的指针,所以我希望这些是静态的。

以下代码无法编译。(我确实有理由需要多个包含相同指针的实例,下面的精简代码没有说明。)

我还需要在这个头文件中包含所有代码。(我知道我可以通过在 EXE 上的 cpp 文件中添加如下语句来编译它,但我需要避免这样做。

HINSTANCE DLLInterface::hinstDLL = 0;

谢谢!

0 投票
2 回答
190 浏览

c# - 如何修改 DLL

我们将外部 Dll 用作:

现在,我们想以相同的模式添加新方法。我们正在寻找有没有办法在 DemoExport.dll 中实现方法?所以,我们可以使用 DemoMethod() 方法,例如:

这可能看起来像一个疯狂的问题,但我们确实需要实现这个方法,所以以后我们可以使用它。

此外,如果上述方法是不可能的,那么如何创建一个新的 dll 或者说如何使用 C# 中不可用的 DllExport。所以,以后,任何人都可以使用带有属性的方法