Здравствуйте! Проблемма в подключении ДЛЛ к VB 6.
есть библиотека на C++
Код:
//ConsoleApplication2.cpp: определяет точку входа для консольного приложения.
//
//#define _UNICODE
#pragma comment( lib, "Activeds.lib" )
#pragma comment( lib, "Adsiid.lib" )
#include <Iads.h>
#include <Adshlp.h>
#include <winldap.h>
#include <iostream>
#include <atlbase.h>
#include <windows.h>
#include <lm.h>
#include <stdio.h>
#include <Lmcons.h>
#include <string>
#include <atlconv.h>
#include <string.h>
using namespace std;
extern "C" __declspec(dllexport) string sAMAccountName ()
{
HRESULT hr;
IADsADSystemInfo *pADsys;
BSTR bstr;
CoInitialize(NULL);
hr = CoCreateInstance(CLSID_ADSystemInfo,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADsADSystemInfo,
(void**)&pADsys);
hr = pADsys->get_UserName(&bstr);
IADs *pUsr=NULL;
USES_CONVERSION;
string strDesc = static_cast<CHAR*>(CW2A(bstr));
string LDAP="LDAP://";
string path = LDAP + strDesc;
wstring wstr( path.begin(), path.end() );
LPCTSTR path2 = W2CT( wstr.c_str( ) );
hr = ADsGetObject( path2, IID_IADs,(void**)&pUsr);
VARIANT var;
VariantInit(&var);
hr = pUsr->Get(CComBSTR("sAMAccountName"), &var );
string s2(W2A(var.bstrVal));
return s2;
}
extern "C" __declspec(dllexport) VARIANT userPrincipalName ()
{
HRESULT hr;
IADsADSystemInfo *pADsys;
BSTR bstr;
CoInitialize(NULL);
hr = CoCreateInstance(CLSID_ADSystemInfo,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADsADSystemInfo,
(void**)&pADsys);
hr = pADsys->get_UserName(&bstr);
IADs *pUsr=NULL;
/*int length = SysStringLen(bstr);
USES_CONVERSION;
string strDesc = static_cast<CHAR*>(CW2A(bstr));
string LDAP="LDAP://";
string path = LDAP + strDesc;
wstring wstr( path.begin(), path.end() );
// const char *path1 = path.c_str();
LPCTSTR path2 = W2CT( wstr.c_str( ) );
//LPCWSTR path2 = (LPCWSTR)wstr;
hr = ADsGetObject( path2, IID_IADs,(void**)&pUsr);
VARIANT userPrincipalName;
VariantInit(&userPrincipalName);
hr = pUsr->Get(CComBSTR("userPrincipalName"), &userPrincipalName );
/*if ( SUCCEEDED(hr) )
{
printf("userPrincipalName: %S\n", V_BSTR(&userPrincipalName) );
VariantClear(&userPrincipalName);
} */
return userPrincipalName;
}
extern "C" __declspec(dllexport) VARIANT Group ()
{
HRESULT hr;
IADsADSystemInfo *pADsys;
BSTR bstr;
CoInitialize(NULL);
hr = CoCreateInstance(CLSID_ADSystemInfo,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADsADSystemInfo,
(void**)&pADsys);
hr = pADsys->get_UserName(&bstr);
IADs *pUsr=NULL;
USES_CONVERSION;
string strDesc = static_cast<CHAR*>(CW2A(bstr));
string LDAP="LDAP://";
string path = LDAP + strDesc;
wstring wstr( path.begin(), path.end() );
// const char *path1 = path.c_str();
LPCTSTR path2 = W2CT( wstr.c_str( ) );
//LPCWSTR path2 = (LPCWSTR)wstr;
hr = ADsGetObject( path2, IID_IADs,(void**)&pUsr);
VARIANT var;
VariantInit(&var);
hr = pUsr->Get(CComBSTR("memberOf"), &var );
return var;
}
extern "C" __declspec(dllexport) void out(VARIANT var)
{
HRESULT hr;
LONG lstart, lend;
SAFEARRAY *sa = V_ARRAY( &var );
VARIANT varItem;
// Get the lower and upper bound.
hr = SafeArrayGetLBound( sa, 1, &lstart );
hr = SafeArrayGetUBound( sa, 1, &lend );
// Iterate and print the content.
VariantInit(&varItem);
printf("Getting service dependencies using IADs :\n");
for ( long idx=lstart; idx <= lend; idx++ )
{
hr = SafeArrayGetElement( sa, &idx, &varItem );
printf("%S ", V_BSTR(&varItem));
VariantClear(&varItem);
}
printf("\n");
VariantClear(&var);
}
и есть код на vb 6.0
Код:
Private Declare Function sAMAccountName Lib "C:\Users\1\Documents\Visual Studio 2012\Projects\ConsoleApplication18\Debug\ConsoleApplication18.dll" () As Integer
Private Sub Command1_Click()
Dim s As String
s = sAMAccountName
End Sub
при запуске просто зависает и все,помогите пожалуйста.