c++实现虚类定义在dll外,在dll内
c++ implement virtual class defined outside dll,in dll
如何在Windows VS2010中做到这一点?
相同解决方案下的2个项目:第一个是常规控制台应用程序,包含两个文件:s.h和j.p p。第二个项目是一个带有一个头文件的dll应用程序:j.h
s.h:
#ifndef M
#define M
class MyMathFuncs
{
public:
// Returns a + b
virtual double Add(double a, double b) const = 0;
// Returns a - b
virtual double Subtract(double a, double b) const = 0;
// Returns a * b
virtual double Multiply(double a, double b) const = 0;
// Returns a / b
// Throws const std::invalid_argument& if b is 0
virtual double Divide(double a, double b) const = 0;
};
double MyMathFuncs::Add(double a, double b) const{};
// Returns a - b
double MyMathFuncs::Subtract(double a, double b) const{};
// Returns a * b
double MyMathFuncs::Multiply(double a, double b) const{};
// Returns a / b
// Throws const std::invalid_argument& if b is 0
double MyMathFuncs::Divide(double a, double b) const{};
j.cpp:
#include "s.h"
#include "j.h"
#include <iostream>
using namespace std;
int main()
{
double a = 7.4;
int b = 99;
MyMathFuncs2 k;
cout << "a + b = " <<
k.Add(a, b) << endl;
cout << "a - b = " <<
k.Subtract(a, b) << endl;
cout << "a * b = " <<
k.Multiply(a, b) << endl;
cout << "a / b = " <<
k.Divide(a, b) << endl;
try
{
cout << "a / 0 = " <<
k.Divide(a, 0) << endl;
}
catch (const invalid_argument &e)
{
cout << "Caught exception: " << e.what() << endl;
}
char c;
cin >> c;
return 0;
}
in dll, j.h:
#ifndef dllheader
#define dllheader
#include "s.h"
#include <stdexcept>
class MyMathFuncs2: public MyMathFuncs {
public:
__declspec(dllexport) double Add(double a, double b) const {
return a + b;
}
// Returns a - b
__declspec(dllexport) double Subtract(double a, double b) const {
return a - b;
}
// Returns a * b
__declspec(dllexport) double Multiply(double a, double b) const {
return a * b * b * b;
}
// Returns a / b
// Throws const std::invalid_argument& if b is 0
__declspec(dllexport) double Divide(double a, double b) const {
if (b == 0)
{
//throw invalid_argument("b cannot be zero!");
}
return a / b;
}
}
#endif
dll编译,但控制台应用程序不编译:
files (x86)microsoft visual studio 10.0vcincludetypeinfo(36): error C2236: unexpected 'struct' '__type_info_node'. Did you forget a ';'?
1>c:program files (x86)microsoft visual studio 10.0vcincludetypeinfo(36): error C2143: syntax error : missing ';' before '{'
1>c:program files (x86)microsoft visual studio 10.0vcincludetypeinfo(36): error C2447: '{' : missing function header (old-style formal list?)
1>c:program files (x86)microsoft visual studio 10.0vcincludetypeinfo(41): error C2146: syntax error : missing ';' before identifier '__type_info_root_node'
1>c:program files (x86)microsoft visual studio 10.0vcincludetypeinfo(41): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:program files (x86)microsoft visual studio 10.0vcincludetypeinfo(41): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:program files (x86)microsoft visual studio 10.0vcincludetypeinfo(67): error C2061: syntax error : identifier '__type_info_node'
1>c:program files (x86)microsoft visual studio 10.0vcincludetypeinfo(74): error C2061: syntax error : ide
在j.h
中class MyMathFuncs2
定义的末尾,请参见:
}
试试改成:
};
相关文章:
- Windows 链接器是否使用 LoadLibrary 解析 DLL 中未定义的符号?
- 如何定义自定义生成配置类型,其中通常是.exe的目标改为 DLL
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 是否可以在C++中基于程序集输出(.dll或.exe)定义变量
- C++ dll 定义静态成员
- CPP DLL 自定义操作代码在安装过程中未执行
- 从模板继承的 MSVC DLL 导出类会导致LNK2005已定义的错误
- 使用自定义简单 Mapi DLL,无需安装 Outlook
- 是否可以单步执行.dll文件中定义的成员函数?
- 设置所需DLL文件的自定义路径:电子应用
- 我的自定义 C++ DLL 的 C# 项目中的 DLL 端口有什么问题?
- 如何在自定义操作DLL(MSI / Wix)中获取"INSTALLED"属性?
- 如何从 JAVA 程序中访问文件中定义的类.DLL方法
- 如何在库加载时将预处理器定义传递给 DLL
- 如何从 c++ 代码中使用 c# dll 中定义的类
- 构建不依赖于MSVCR120.DLL的自定义英特尔 MKL DLL
- MSI安装被自定义操作DLL中断
- 当InProcServer32键定义DLL的完整路径时,path环境变量中为什么需要COM DLL的路径
- 在QtCreator中链接dll的未定义引用错误
- Unity内部编译器错误与自定义DLL