VB6 DLL всегда является COM DLL. Я опишу пример как можно меньше слов. Предположим, у вас есть проект ActiveX DLL в VB6 с классом CTest, который содержит метод, как показано ниже
Открытая функция vbConcat (ByVal a As String, ByVal b As String) As String
vbConcat = a & b
Конечная функция
и вы установили имя проекта как VBTestLib в свойствах проекта VB6 и
Вы скомпилировали проект как F: \ proj \ VB6 \ ActiveXDLL \ VBTestDLL.dll
Вам необходимо зарегистрировать dll с помощью команды Windows
regsvr32 F: \ proj \ VB6 \ ActiveXDLL \ VBTestDLL.dll
теперь ваш код C ++:
# import "F: \ proj \ VB6 \ ActiveXDLL \ VBTestDLL.dll"
использование пространства имен VBTestLib;
void CDialogTestDlg :: OnButton1 ()
{
HRESULT hresult;
CLSID clsid;
_CTest *t; // a pointer to the CTest object
_bstr_t bstrA = L"hello";
_bstr_t bstrB = L" world";
_bstr_t bstrR;
::CoInitialize(NULL);
hresult=CLSIDFromProgID(OLESTR("VBTestLib.CTest"), &clsid);
hresult= CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,
__uuidof(_CTest),(LPVOID*) &t);
if(hresult == S_OK)
{
bstrR = t->vbConcat(bstrA , bstrB);
AfxMessageBox((char*)bstrR);
}
}
Вот и все, чтобы начать.