Каталоги запчастей online для урал 4320 каталог запчастей урал 4320.
C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Народ, подскажите в чем дело? Нифига не пойму :(
Nimble
Отправлено: 02.11.2003, 19:24


Дежурный стрелочник

Группа: Участник
Сообщений: 34



Решил написать простенькую утилитку, для добавления/удаления алиасов в BDE. Текст проги следующий:

CODE

#include <string.h>
#include <iostream.h>
#include <bde.hpp>
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
 if (argc>2)
 {
   if (!strcmp(argv[1], "-a"))
     DbiAddAlias(0, argv[2], 0, argv[3], true);

   if (!strcmp(argv[1], "-d"))
     DbiDeleteAlias (0, argv[2]);
 }
 else
   cout<<"...";
 return 0;
}
//---------------------------------------------------------------------------


но билдер пишет ошибку:
[Linker Error] Unresolved external '__stdcall Bde::DbiAddAlias(Bde::hDBIObj *, char *, char *, char *, int)' referenced from C:\TEMP\UNIT1.OBJ
уже нифига не соображаю, мож ктонить подскажет в чем запарка? А даделать до завтра край как нужно sad.gif
Заранее спасибо.
Nimble
Отправлено: 02.11.2003, 19:34


Дежурный стрелочник

Группа: Участник
Сообщений: 34



Да, мож кто знает другой способ добавить/удалить алиас в BDE.
Первостепенная задача добавить алиас, а инсталлятор не имеет такой функции как допустим в InstallShield, но можно запускать проги.
Вот что я наковырял. В бдешном файле idapi32.dll есть функция DbiAddAlias, но как ее вызвать из командной строки? Можно через rundll32, но как передать параметры? Мож на этот вопрос кто ответит.
Admin
Отправлено: 02.11.2003, 20:36


Владимир

Группа: Администратор
Сообщений: 1190



CODE

#include <bde.hpp>

void __fastcall TForm1::Button1Click(TObject *Sender)
{
DbiInit(NULL);
DbiAddAlias(NULL, "newAliasName", NULL,"PATH:c:\\DBase\\" , true);

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
DbiDeleteAlias (NULL, "newAliasName");
}


Нормально добавляется.

---

CODE


#pragma hdrstop
#include <string.h>
#include <iostream.h>
#include <conio.h>
#include <bde.hpp>

//-------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
cout<<argv[1]<<" "<<argv[2]<<" "<<argv[3]<<"\n";
if (argc>2)
{
if (strcmp(argv[1], "-a") == 0){
DbiInit(NULL);
DbiAddAlias(NULL, argv[2], NULL, argv[3], true);
}
}
else
cout<<"...";
char ch = getch();
return 0;

}


Отредактировано Admin — 02/11/2003, 21:38
Nimble
Отправлено: 03.11.2003, 00:58


Дежурный стрелочник

Группа: Участник
Сообщений: 34



2Владимир: Большое спасибо за ответ smile.gif Да кстати без DbiInit не работает, я это упустил в силу того, что у меня до него еще не дошло smile.gif
Блин принес домой исходник, запустил, всё работает. Очень удивился. Оказалось, что если компилить с включенной опцией "Build with runtime packages" в Project->Options на закладочке Packages, то всё ок ... само собой exe'шник без rtl60.bpl bdertl60.bpl работать откажется, а если компилить с выключенной опцией, то возникает ошибка, про которую я говорил sad.gif( Ладно пока так ...
Еще раз спасибо за ответ.

З.Ы. Если кто найдет решение этой проблеммы в ближайшее время, буду ОЧЕНЬ благодарен.

Вернуться в Вопросы программирования в C++Builder