Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Проблема с дллкой (С++ Builder) |

09.09.2009, 10:43
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Проблема с дллкой (С++ Builder)
Есть дллка с ф-цией
Код:
extern "C" __declspec(dllexport) void listDrives(vector <string> &drives)
{
char *out=new char[1024*12];
IDiscMaster2 *DM;
IEnumVARIANT *Enum;
unsigned long count=0;
long drvNums;
VARIANT DI;
BSTR volume,app=bstr_t("T_T"),vendor,prod;
char letter[5];
HRESULT hr=0;
CoCreateInstance(__uuidof(MsftDiscMaster2), NULL, CLSCTX_INPROC_SERVER, __uuidof(IDiscMaster2),(void**)&DM);
DM->get_Count(&drvNums);
DM->get__NewEnum(&Enum);
for(int i=0;i<drvNums;i++)
{
IDiscRecorder2 *DR;
hr=CoCreateInstance(__uuidof(MsftDiscRecorder2),NULL,CLSCTX_INPROC_SERVER,__uuidof(IDiscRecorder2),(void**)&DR);
if(hr!=S_OK){goto Exit;}
Enum->Next(1,&DI,&count);
hr=DR->InitializeDiscRecorder(DI.bstrVal);
if(hr!=S_OK){goto Exit;}
hr=DR->AcquireExclusiveAccess(false,app);
if(hr!=S_OK){goto Exit;}
hr=DR->get_VolumeName(&volume);
if(hr!=S_OK){goto Exit;}
GetVolumePathNamesForVolumeName(_com_util::ConvertBSTRToString(volume),letter,5,NULL);
/*hr=DR->get_VendorId(&vendor);
if(hr!=S_OK){goto Exit;}
hr=DR->get_ProductId(&prod);
if(hr!=S_OK){goto Exit;}*/
wsprintf(out,"%s;%s",letter,_com_util::ConvertBSTRToString(DI.bstrVal));
drives.insert(drives.begin(),string(out));
Exit:
memset(out,NULL,strlen(out));
DR->ReleaseExclusiveAccess();
DR->Release();
}
delete []out;
}
Пытаюсь её заюзать
Код:
#include <vector>
#include <map>
#include <string>
.......................................................
using namespace std;
HINSTANCE hLib;
typedef void (WINAPI *listDrivesfunc)(vector <string> &drives);
listDrivesfunc listDrives;
........................................................
hLib=LoadLibrary("dlld.dll");
if(hLib==NULL)
{
TerminateProcess(GetCurrentProcess(),0);
}
........................................................
listDrives=(listDrivesfunc)GetProcAddress((HMODULE)hLib,"listDrives");
vector <string> drvs;
listDrives(drvs);//тут выбивает external exception E06D7363
Насколько я понял после гугления проблема в передаваемой переменной в ф-цию.Но почему непонял 
Вопрос- где я мог накосячить?
|
|
|
|
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Проблема с дедиками [help!]
|
Sniper482 |
Безопасность |
4 |
14.09.2009 21:22 |
|
Embarcadero: C++ Builder 2009
|
Kollinz |
С/С++, C#, Delphi, .NET, Asm |
1 |
11.08.2009 11:27 |
|
Непонятная проблема с интернетом по всей локалке
|
ZneP |
Администрирование |
6 |
19.06.2009 15:27 |
|
[Статья] Создание расширения для Windows Explorer при помощи C++ Builder
|
Dobby007 |
С/С++, C#, Delphi, .NET, Asm |
2 |
29.03.2009 08:58 |
|
С++ Builder проблема с кучей
|
_nic |
С/С++, C#, Delphi, .NET, Asm |
13 |
06.02.2009 01:26 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|