我一直在用 C++ 编写一个 DLL,现在我必须从 VB6 应用程序中调用这个 DLL。
这是来自此 DLL 的代码示例:
#include <vector>
#include <string>
using namespace std;
void __stdcall DLLFunction (vector<Object>*)
{
// performs a few operations on the Objects contained in the vector.
}
struct Object
{
long CoordX;
long CoordY;
long Width;
long Height;
LPSTR Id;
};
我还在 VB6 中定义了“对象结构”
Private Type Object
CoordX As Integer
CoordY As Integer
Width As Integer
Height As Integer
Id As String
End Type
问题是我不知道什么 vb6 类型可以代表 std::vector 以调用 DLL 的函数。
注意:
- 我使用 DLL 的向量来添加对象。
- 我使用指针以尽可能少地使用内存。
- 对不起我的英语,它根本不是我的母语。
- 感谢您阅读并尝试帮助我。
编辑:
- 我修复了打字问题(ID 肯定由 NullChar 结束,所以 LPSTR 应该可以解决问题)。- 我读了你们的答案,我要感谢你们两个,你们的答案很接近,还有一个主要问题。我的 DLL 肯定需要向容器中添加元素。因此,我想知道我怎么能做到这一点。也许我可以向我的函数添加一个返回类型,然后使该函数能够返回它创建的项目(而不是将其直接放入容器中),以便 vb6 应用程序获取这些项目并能够处理它们,但是我不知道该怎么做
编辑之二:
@Rook:我觉得我可以通过使用新结构来实现这一点。
结构 ObjectArrayPointer
{
对象* 指针;
size_t 计数器;
}
然后以这种方式调用我的函数:
void __stdcall DLLFunction (ObjectArrayPointer*);
然后我就可以为我的 VB6 应用程序添加对象并编辑大小参数以找到这些新对象。那是你的意思吗?