【发布时间】:2011-05-31 03:15:20
【问题描述】:
我开发了一个 C++ 类来访问 USB 上的软件保护加密狗。 C++类在Linux下是用g++开发的,但是我在Windows下用MinGW可以编译成功。我有一个使用 VB6 (Visual Basic 6) 构建的科学应用程序。
问题是如何将我的 C++ 类公开给 VB6 应用程序?有哪些可能的方法来做到这一点?我需要使用 COM 吗? (嗯,“无微软”的解决方案更可取:)
非常感谢您的帮助!
更新 1. 阅读您的 cmets 我意识到我需要为 C++ 类实现一个 COM 包装器。周围有什么好的和最近的例子吗?我可以使用 MinGW(并避免 MSVC)实现 COM 包装器吗?
更新 2。 最后,我决定为这个问题提供悬赏。以下是我想更好地理解的事情:
1. 我意识到我需要为我的 C++ 类实现一个 COM 包装器。有人可以为我提供如何为这样的课程制作这个的工作示例:
class ValueMapper
{
public:
ValueMapper( ) { }
ValueMapper( double fmin, double fmax, int ilength ) {
SetMapping( fmin, fmax, ilength );
}
inline double GetMin() { return min; }
inline double GetMax() { return max; }
inline int GetLength() { return length; }
virtual inline void SetMapping( double fmin, double fmax, int ilength )
{
min = fmin;
max = fmax;
length = ilength;
}
virtual inline int MapValue( double value ) {
double factor = length / (max - min);
return (int)RoundTo( (value-min) * factor );
}
static double RoundTo( double value, double eps = 1 ) {
return floor(value/eps + 0.5) * eps;
}
protected:
double min;
double max;
int length;
};
2. 如何使用 VB6 生成的 COM 包装器?我需要注册一个COM服务器吗?不注册可以使用吗?
3. 可选。是否可以使用 MinGW 实现 COM 包装器?
【问题讨论】:
-
您为什么要避免使用 COM? VB 6 在 COM 开发中完全根深蒂固。很难想象您在尝试使用“无 Microsoft”解决方案时会取得什么成就。如果您愿意,您就不会编写 VB 6 应用程序或在 Windows 上运行它。
-
@Cody Gray,感谢您提供指向笔记的链接!真的很值得一读。好吧,看来我需要使用COM。最近有没有 ISO C++ 类的 COM 包装器示例?
-
你没有有使用 COM。还有其他方法可以做到这一点,但通过 COM 做到这一点实际上更简单。这有点讽刺,因为从历史上看,COM 没有什么“简单”的东西,但这就是 VB 6 的基础,一旦您克服了 COM 开发的最初障碍,它确实大大简化了这样的互操作场景。我真的不能给你任何关于 MinGW 的建议。我不太关心它,也从未真正将它用于严肃的 Windows 开发。