为什么VC中报错:不允许 dllimport 函数 的定义 ??

218201 2005-08-10 03:55:57
在VC7.1中如下代码编译报错如何处理?

BCB6下正常.

VS.NET2003中:
“CTest<T>::~CTest” : 不允许 dllimport 函数 的定义
“CTest<T>::CTest” : 不允许 dllimport 函数 的定义



//代码如下

template<class T>
class __declspec(dllimport) CTest
{
public:
CTest();
~CTest();
};

template<class T>
CTest<T>::CTest()
{
//
}

template<class T>
CTest<T>::~CTest()
{
//
}
...全文
1417 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
218201 2005-08-11
  • 打赏
  • 举报
回复
look
218201 2005-08-10
  • 打赏
  • 举报
回复
就是说像帖子中的代码中的__declspec( dllimport ),bcc是可以忽略的.

cl在非模板类的时候也能忽略,但在模板类中会报"不允许 dllimport 函数 的定义"

可能是因为VC把上面的模板处理后,就在函数的定义前加了__declspec( dllimport )

(从代码写法上自然人读不出有dllimport定义的含义;只是dllimport了声明)


这个,能不能通过配置解决.
218201 2005-08-10
  • 打赏
  • 举报
回复
可能说得不是很明白,是这样的

模板类这样子导出导入基本是不可能的.这里是相当定义了一个模板类.

上面的代码是从一个开源库里大量使用的一个型.
template<class T>
class 宏xxxx CTest
{

(不知道什么原因大量遗留着这么一种形式的宏,宏xxxx不仅仅一个有很多种,它们在某些时候代入的就条件下展开为__declspec( dllimport ),这些宏又是用另一个开源库的宏定义的)

因为这种型的代码在该库中大量存在,况且代码也不由我来控制,所以我不想更改该宏的定义.(假如改为空白应该是可以通过编译的)

因为是用CMake工具生成的VS工程文件,所以我想问问有没有编译器选项之类可以忽略这个错误.或是其他办法.
大雾 2005-08-10
  • 打赏
  • 举报
回复
模板主要是源码级复用,要在编译期进行实例化后才能使用.dll是二进制复用.

如果你的代码可以工作,那么当你使用那个模板类的时候,没有办法实例化.

你可以先实例化后再导出,也就是导出实例化的类,而不是模板类,而那样,你必须事先知道T可能是什么.
吹泡泡的小猫 2005-08-10
  • 打赏
  • 举报
回复
编译器之间还是有不兼容的地方,如果不能改代码很郁闷

为什么不能改呢?
lixiaosan 2005-08-10
  • 打赏
  • 举报
回复
#define DllImport __declspec( dllimport )

class DllImport CTest
{
public:
CTest();
~CTest();
};

看不出有什么问题
218201 2005-08-10
  • 打赏
  • 举报
回复
〉〉 vcleaner
我不能改代码


代码不是我写的,是老外写的一个库

那个__declspec(dllimport)其实是宏在一定的条件下代入的,


这个代码应该理解为定义一个模板类,而忽略__declspec(dllimport)含义
(类在代码中完整实现了麽)

但是VC给报了个错,偶只想知道怎么样才能通过编译
亿云力科技 2005-08-10
  • 打赏
  • 举报
回复
没写过类库程序,mark
老夏Max 2005-08-10
  • 打赏
  • 举报
回复
参考:
如何在Dll中导出STL类
http://www.vckbase.com/document/viewdoc/?id=1263
DentistryDoctor 2005-08-10
  • 打赏
  • 举报
回复
VC7.1不支持?
内容概要:本文提出了一种基于高保真电磁暂态仿真的智能电网虚假数据注入攻击(FDIA)数据集构建与影响分析方法,依托PSCAD与MATLAB联合仿真平台,构建IEEE标准测试系统(如9节点或39节点系统)的精细化电磁暂态模型,精确模拟电网在正常运行及遭受FDIA下的动态响应过程,采集高精度、高时间分辨率的电压、电流、功率等电气量时序数据,生成具有强物理约束性和可复现性的攻击数据集。研究进一步结合现代状态估计理论、残差检测机制与机器学习分类算法,对FDIA的隐蔽性特征、攻击传播路径、系统关键变量偏移程度及暂态稳定性影响进行系统性量化评估,旨在为智能电网安全防护体系的设计、入侵检测模型的训练与攻防策略的有效性验证提供高可信度的数据基础与理论支撑。; 适合人群:面向电力系统自动化、能源互联网安全、工业控制系统安全等方向的研究生、科研人员及工程技术人员,要求具备电力系统分析、状态估计基础、MATLAB/PSCAD联合仿真能力以及基本的网络安全背景知识。; 使用场景及目标:① 复现和验证主流FDIA相关学术论文中的攻击模型与检测算法;② 构建符合实际物理规律、可用于训练深度学习或机器学习驱动的入侵检测系统(IDS)的真实攻击数据集;③ 深入探究虚假数据注入对电网暂态稳定性、继电保护动作逻辑、频率调节等关键功能的影响机理。; 阅读建议:本资源以高保真仿真为核心,强调数据生成的真实性与实验可重复性,读者应重点关注PSCAD与MATLAB之间的数据交互机制、攻击向量的设计原则与注入方式、以及多维度影响评估指标体系的构建方法,建议结合所提供的仿真模型与代码进行动手实践与结果验证。
内容概要:本文系统阐述了基于格子Boltzmann方法(Lattice Boltzmann Method, LBM)对二维通道内多孔介质流动进行数值模拟的理论体系、Matlab代码实现流程及结果验证方法。深入剖析了LBM在处理复杂流体系统尤其是不规则几何结构多孔介质流动中的独特优势,详细介绍了模型构建过程、边界条件设定、碰撞与传播环节的算法实现机制,并通过Matlab编程完成仿真运算,实现了对速度场、压力场等关键物理量的可视化分析与精度验证,确保模拟结果具备良好的准确性与可靠性。; 适合人群:具备流体力学基础知识和一定Matlab编程能力的研究生、科研人员及工程技术人员,尤其适合从事多孔介质流动、计算流体力学(CFD)或LBM方法研究的相关领域研究人员。; 使用场景及目标:①掌握格子Boltzmann方法的核心原理及其在多孔介质流动模拟中的具体应用;②学习利用Matlab实现LBM算法并开展科学计算与结果可视化的方法;③为相关科研项目、学术论文复现或实际工程仿真提供可复用的代码框架与技术实施路径。; 阅读建议:建议读者结合流体力学与数值计算相关背景知识,逐步理解算法推导过程,动手运行并调试所提供的Matlab代码,通过调整参数或几何模型加深对LBM方法灵活性与适用性的认识,同时鼓励将该方法拓展至三维流动或多物理场耦合问题的研究中。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧