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
уже нифига не соображаю, мож ктонить подскажет в чем запарка? А даделать до завтра край как нужно
Заранее спасибо. |
|
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Владимир: Большое спасибо за ответ Да кстати без DbiInit не работает, я это упустил в силу того, что у меня до него еще не дошло
Блин принес домой исходник, запустил, всё работает. Очень удивился. Оказалось, что если компилить с включенной опцией "Build with runtime packages" в Project->Options на закладочке Packages, то всё ок ... само собой exe'шник без rtl60.bpl bdertl60.bpl работать откажется, а если компилить с выключенной опцией, то возникает ошибка, про которую я говорил ( Ладно пока так ...
Еще раз спасибо за ответ.
З.Ы. Если кто найдет решение этой проблеммы в ближайшее время, буду ОЧЕНЬ благодарен. |
|
|