![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
dll и Ado [D7, MSSQL]
Stas © (2003-12-11 10:41:00)
Никто не сталкивался с такой проблемой:
Есть процедура в dll-ке, которая пытается установить коннект через AdoConnection и открыть некий набор данных, но при попытки установить коннект в проекте вылазит ошибка Access violation.
Но вызывая ту же процедуру из VBA в Access все выполняется нормально !
dll написана на delphi !
akim2 (2003-12-11 13:40:00) [21]
Народ, а я нормально работаю с базами в DLL.
И передаю открытые ADOConnection и открываю данные в DLL.
Может Stas более подробно опишет задачу. Типа надо получить занчение из таблицы или еще что-то
Stas (2003-12-11 13:39:00) [22]
Vlad © (11.12.03 13:37) [22]
А ты читал все что написанно ?
Stas © (11.12.03 11:37) [7]
ОШИБКА ВЫДАЕТСЯ ПРИ ИНИЦИАЛИЗАЦИИ !!!
Vlad (2003-12-11 13:37:00) [23]
> Stas © (11.12.03 13:29) [19]
Оч. смешно.
И что из этого по-твоему должно работать ?
Где коннект к базе, где открытие датасета?
> MV (11.12.03 13:31) [21]
if your DLL exports any procedures or
functions that pass strings as parameters or function results
MV (2003-12-11 13:31:00) [24]
Попробой для прикола сделать, как сказано:
ShareMem must be the
first unit in your library"s USES clause
Stas (2003-12-11 13:30:00) [25]
А вызов производится так:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure ShowReport; stdcall; external ".\Forma.dll";
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowReport;
end;
end.
Stas (2003-12-11 13:29:00) [26]
Vlad © (11.12.03 13:21) [17]
Ну если для этого нужно быть телепатом то пожалуйста:
library forma;
{ Important note about DLL memory management: ShareMem must be the
first unit in your library"s USES clause AND your project"s (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
uses
SysUtils,
Classes,
db,
AdoDb;
Var Con:TAdoConnection;
{$R *.res}
procedure ShowReport;stdcall; export;
begin
;
end;
exports
ShowReport;
begin
Con:=TAdoConnection.Create(nil);
end.
MV (2003-12-11 13:23:00) [27]
Блин, когда отпуск-то закончится?
Так каждый раз все подробности и описывать, что ли?
Vlad (2003-12-11 13:21:00) [28]
> Stas © (11.12.03 13:16) [16]
> Никто не знает что делать ?
Местные телепаты в отпуске. Или код давай или бери бубен и танцуй вокруг компа. Глядишь заработает.
Stas (2003-12-11 13:16:00) [29]
Никто не знает что делать ?
Stas (2003-12-11 12:20:00) [30]
Попробывал создать AdoConnection без формы и все равно ругается !
asp (2003-12-11 12:04:00) [31]
Pontic (11.12.03 11:36) [6]> С BDE как раз просто.
Из приложения передать Database.Handle и проследить, чтобы Database.DatabaseName не совпадали.
Плюс в том, что все идет через одно соединение с БД.
Stas (2003-12-11 12:00:00) [32]
Stas © (11.12.03 11:52) [12]
Нет это не то...
А есть люди у кого работает dll при таком раскладе ?
Stas (2003-12-11 11:52:00) [33]
Pontic (11.12.03 11:42) [11]
Спасибо, сейчас попробую
Pontic (2003-12-11 11:42:00) [34]
посмотри http://www.rxlib.ru/faqs/faqc_en/18804.html
Stas (2003-12-11 11:41:00) [35]
А что туда вписать ?
MV (2003-12-11 11:39:00) [36]
Ага! А если не nil?
Stas (2003-12-11 11:38:00) [37]
stdcall вписал !
Пробовал работать с Tform вместо DataModule - всеравно не работает.
Stas (2003-12-11 11:37:00) [38]
Не работает даже без кода !
Я код заремил.
и в dll написал так:
datamodule1:=TdataModule1.Create (nil)
Даже не коннекчусь, а ошибка вылазит при инициализации dll
Но стоит поубирать с dataModule Ado компоненты, то все нормально.
Pontic (2003-12-11 11:36:00) [39]
Такая же замануха, но с datamodule"м в дллке, сам использую бде и интербейс. Если вдруг найдешь решение - напиши
Ega23 (2003-12-11 11:31:00) [40]
Ещё соглашения о вызовах посмотри. stdcall"ы там всякие.