- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这个问题可能类似于 DLL Exports: not all my functions are exported但由于那里没有完全回答,我不得不再问一次。我的情况也是因为使用模板和导出整个类略有不同。
使用环境:VS2008,cl9.0。
我创建了一个 dll 项目并添加了大约 40 个文件(每个类一个文件),主要是标题,因为很多类都是模板。遗产的一个例子是:
// Class1.h
template<class TYPE>
class TInt
{
// Some member functions here
// Also a function bool IsValid() const;
};
// Implementation of template here in the header
// Class2.h
#ifndef DllExpImpM
#define DllExpImpM __declspec(dllimport)
#endif
class DllExpImpM CInt : public TInt<double>
{
// Some member functions here
};
// Class2.cpp
// Some includes, including "stdafx.h", which sets DllExpImpM
// to __declspec(dllexport)
template class DllExpImpM TInt<double>;
// Implemenation of CInt
到目前为止,只要我使用调试(编译)选项,它就可以正常工作。我能够使用其他项目的 dll 项目。
但是如果 dll projekt 被编译为发布版(工作正常),我不能在其他项目中使用它,因为编译器会提示缺少一些功能,例如TInt 中的 IsValid()。我用dependency walker检查了一下,果然,编译器是对的!成员函数 IsValid() 未导出,连同另一个函数以及构造函数和析构函数。 TInt 的所有其他成员函数都是导出的,我可以使用 dependency walker 看到它们,我可以从其他项目中使用它们。这也以类似的方式发生在另一个类上。
然后我使用 dependency walker 和 winmerge 比较了调试 dll 和发布 dll。它们几乎相同,只是发布的 dll 缺少一些功能(大约 3%)。
我不知道哪里出了问题。我知道我没有太多信息(整个信息太多了,我还找不到一个不起作用的简单例子),对我来说,这一切听起来都有点奇怪。但也许那里的任何人都曾经遇到过同样的问题。我非常感谢每一个想法。
谢谢!
最佳答案
如果它适用于调试,但不适用于发布,那么您需要确定不同之处。我的第一个猜测是 #define
宏或等效的 /D
宏未被定义或被错误定义。
可能是 DllExpImpM
或者其他东西。
如果不是宏,那么构建之间还有什么变化?
关于c++ - 并非所有函数都使用 dllexport 导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20830416/
我有一个用 C 编写的可执行文件,其中包含一些我想从 c# 应用程序中使用的函数。我以前写过很多 dll 并且能够通过添加 __declspec(dllexport) 来使用它们中的函数。到函数声明。
我正在使用 RGiesecke DLLExport 库生成一个 C# DLL,它可以从基于 VC6 构建的遗留应用程序中动态加载。它导出方法并从 VC6 代码中调用它们。没问题。但是,只要我尝试为我的
我得到了这个庞大的项目,其中包含许多在 dll 文件中定义的类。我需要提取该项目的一部分并从该部分创建一个新项目。我已经设法通过使用 Visual Studio 中的代码映射找到了一些 dll 文件,
我已根据 MSDN 文档完成所有操作,但我的函数仍未导出。 LINK1 LINK2 LINK3 这是我的(2 个项目,DLL 和从 dll 导入的应用程序),看起来像这样(简短版): DLL 函数.h
我有一个加载 dll 的 exe。我都写了。 我正在导出一个返回 std::wstring 的函数 foo。 它所做的就是说 std::wstring blah = L"rgjwgfw"; ret
考虑一个简单的类,它只包含内联成员函数。例如: template class Point2D { public: typedef Point2D ThisType; typedef
我有我的dll项目 // .h #pragma once #include extern "C" { void __declspec(dllexport) __stdcall sort(int* v
Microsoft 说:“模板不能与使用 __declspec (dllimport) 或 __declspec (dllexport) 声明的函数一起使用。” (link)。 这是什么意思?我可以导
代码: #ifdef BUILD_DLL #define MY_API __declspec(dllexport) #else #define MY_API __declspec(dllimport)
您好,我对 dllexport 有点困惑。例如,当我在类里面使用 __declspec( dllexport ) 时 #define DllExport __declspec( dllexpor
我试图通过导出为 DLL(在 Windows/VS 2010 上)来保护一些 C++ 代码。 在下面的示例中,var 在父类(super class)构造函数中设置,并且调试器显示它肯定设置为引用某物
我现在正在使用 Visual Studio。我有一个经典的宏来标记 dll api 函数和类。我的理解是标记一个类 dllexport 可以使它的功能从其他二进制文件中可见,从而可以使用 dll 提供
我正在创建一个要在 C# 应用程序中使用的 C 包装器库。在我的 .c 中,函数定义如下: __declspec(dllexport) uint8_t aes132h_nonce(struct aes
这个问题可能类似于 DLL Exports: not all my functions are exported但由于那里没有完全回答,我不得不再问一次。我的情况也是因为使用模板和导出整个类略有不同。
现在我分析一些不是我写的旧代码。在 header 中有许多这样的声明: SVPDSDKDLLEXPORT inline C3vec mult(C3vec src, D3DXMATRIX &m); SV
#if COMPILING_DLL #define DLLEXPORT __declspec(dllexport) #else #define DLLEXPORT __declspec
我只是 c++ 的初学者,对我来说这似乎是不必要的代码膨胀。我知道 dllimport/export 用于共享 dll 功能,但仅使用公共(public)/私有(private)访问器有什么问题? 如
编辑 为了解决这个问题,我将以下内容添加到头文件(的开头): #ifdef GetMessage #undef GetMessage static inline BOOL GetMessage( LP
我正在考虑为名为 SmartDVB 的软件编写插件。它需要我导出以下函数(这是一个 C++ 示例): BOOL RegisterAddOn(UINT iAddOnId, IAddOnInterface
我想使用 dllexport 导出函数。但是我在编译器“错误 C4439:'WrappedC':签名中具有托管类型的函数定义必须具有 __clrcall 调用约定”时遇到错误。 我在头文件 (.h)
我是一名优秀的程序员,十分优秀!