Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];

Вниз

dll и Ado   Найти похожие ветки 

 
Stas   (2003-12-11 10:41) [0]

Никто не сталкивался с такой проблемой:
Есть процедура в dll-ке, которая пытается установить коннект через AdoConnection и открыть некий набор данных, но при попытки установить коннект в проекте вылазит ошибка Access violation.
Но вызывая ту же процедуру из VBA в Access все выполняется нормально !
dll написана на delphi !


 
Stas   (2003-12-11 11:15) [1]

Никто не сталкивался ?


 
Плохиш_   (2003-12-11 11:21) [2]

>Stas © (11.12.03 11:15) [1]

Ошибка в 17й строке


 
Stas   (2003-12-11 11:24) [3]

>Плохиш_ (11.12.03 11:21) [2]
Я что-то непонятно написал ?


 
Малиновский Владимир   (2003-12-11 11:29) [4]

Да все нормально, только почему-то строку №17 редко кто с первого раза указывает.
Код давай!


 
Ega23   (2003-12-11 11:31) [5]

Ещё соглашения о вызовах посмотри. stdcall"ы там всякие.


 
Pontic   (2003-12-11 11:36) [6]

Такая же замануха, но с datamodule"м в дллке, сам использую бде и интербейс. Если вдруг найдешь решение - напиши


 
Stas   (2003-12-11 11:37) [7]

Не работает даже без кода !
Я код заремил.
и в dll написал так:
datamodule1:=TdataModule1.Create (nil)
Даже не коннекчусь, а ошибка вылазит при инициализации dll
Но стоит поубирать с dataModule Ado компоненты, то все нормально.


 
Stas   (2003-12-11 11:38) [8]

stdcall вписал !
Пробовал работать с Tform вместо DataModule - всеравно не работает.


 
MV   (2003-12-11 11:39) [9]

Ага! А если не nil?


 
Stas   (2003-12-11 11:41) [10]

А что туда вписать ?


 
Pontic   (2003-12-11 11:42) [11]

посмотри http://www.rxlib.ru/faqs/faqc_en/18804.html


 
Stas   (2003-12-11 11:52) [12]

Pontic (11.12.03 11:42) [11]
Спасибо, сейчас попробую


 
Stas   (2003-12-11 12:00) [13]

Stas © (11.12.03 11:52) [12]
Нет это не то...
А есть люди у кого работает dll при таком раскладе ?


 
asp   (2003-12-11 12:04) [14]

Pontic (11.12.03 11:36) [6]> С BDE как раз просто.
Из приложения передать Database.Handle и проследить, чтобы Database.DatabaseName не совпадали.
Плюс в том, что все идет через одно соединение с БД.


 
Stas   (2003-12-11 12:20) [15]

Попробывал создать AdoConnection без формы и все равно ругается !


 
Stas   (2003-12-11 13:16) [16]

Никто не знает что делать ?


 
Vlad   (2003-12-11 13:21) [17]


> Stas © (11.12.03 13:16) [16]
> Никто не знает что делать ?

Местные телепаты в отпуске. Или код давай или бери бубен и танцуй вокруг компа. Глядишь заработает.


 
MV   (2003-12-11 13:23) [18]

Блин, когда отпуск-то закончится?
Так каждый раз все подробности и описывать, что ли?


 
Stas   (2003-12-11 13:29) [19]

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.


 
Stas   (2003-12-11 13:30) [20]

А вызов производится так:

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.


 
MV   (2003-12-11 13:31) [21]

Попробой для прикола сделать, как сказано:
ShareMem must be the
first unit in your library"s USES clause


 
Vlad   (2003-12-11 13:37) [22]


> 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


 
Stas   (2003-12-11 13:39) [23]

Vlad © (11.12.03 13:37) [22]

А ты читал все что написанно ?
Stas © (11.12.03 11:37) [7]
ОШИБКА ВЫДАЕТСЯ ПРИ ИНИЦИАЛИЗАЦИИ !!!


 
akim2   (2003-12-11 13:40) [24]

Народ, а я нормально работаю с базами в DLL.
И передаю открытые ADOConnection и открываю данные в DLL.

Может Stas более подробно опишет задачу. Типа надо получить занчение из таблицы или еще что-то


 
Stas   (2003-12-11 13:43) [25]

akim2 (11.12.03 13:40) [24]
см. Stas © (11.12.03 13:29) [19]
Если я вставлю в процедуру ShowReport строку
Con:=TAdoConnection.Create(nil);
то вызовется ошибка.
Как ты это делаешь ?


 
akim2   (2003-12-11 13:47) [26]

Я могу Stas на мыло послать работающий проект?


 
Stas   (2003-12-11 13:50) [27]

akim2 (11.12.03 13:47) [26]
О класс!
посылай !

Заранее благодарен.


 
akim2   (2003-12-11 14:00) [28]

Ушло,
Токо я бы тебе рекомендовал не использовать статический вызов библиотек кот работают с ADO и кот создают формы, а так же в библиотеках не пользоваться TDataModule. Клади компоненты сразу на форму


 
Stas   (2003-12-11 14:05) [29]

Спасибо получил!


 
Stas   (2003-12-11 14:17) [30]

akim2 (11.12.03 14:00) [28]

Попробывал твой проект !
При динамическом подключении твоей dll, я проверял пошагово дошло до вызова самой процедуры (последняя строчка) и подвисло приложение. А при статическом тоже самое что и у меня.
Пробывал на D6,D7 винда XP. Еще у двух человек такое на D7,D6 под 2000.
Может быть MDAC глючит ?
Самое интересное что из Access вызывается все нормально !


 
Stas   (2003-12-11 14:24) [31]

Stas © (11.12.03 14:17) [30]
Все работает !
Это уже я немного прогнал. Подключал твою Dll, с твоей строкой подключения в AdoConnection.

СПАСИБО !!!


 
KSergey   (2003-12-11 17:28) [32]

2 Stas:
Посмотрите еще раз код, посланный вами и скажиме: он информативен? Комуто вообще интересно читать наименование модуля, а тем более стандартный комментарий борланда??


 
me   (2003-12-11 19:04) [33]

Стандартные грабли - в Dll используется сервтс ADO и не делается явная инициализация COM (CoInitialize)


 
KSergey   (2003-12-12 09:03) [34]

[33] me (11.12.03 19:04)
Стандартные грабли - в Dll используется сервтс ADO и не делается явная инициализация COM (CoInitialize)

Я хотел про это написать, однако ведь автор не жалуется на эиу ошибку, у него - AV - а потому видимо до проблемы CoInitialize дело еще не дошло...
Да и мы с вами ведь не знаем какое хост-приложение, может это производится в нем?


 
Stas   (2003-12-12 09:25) [35]

KSergey © (11.12.03 17:28) [32]
Если бы ты внимательно все прочитал, то понял бы что это интересовало Vlad © (11.12.03 13:37) [22]


 
KSergey   (2003-12-12 09:34) [36]

> [35] Stas © (12.12.03 09:25)

Лучше, конечно, спросить у него самого, но, уверен, что как минимум комментарий от борланда (стандартный!!!!!!) его совершенно не интересовал. ;)


 
Stas   (2003-12-12 09:35) [37]

me (11.12.03 19:04) [33]

А можно подробнее как это сделать ?


 
Stas   (2003-12-12 09:38) [38]

А что его тогда интересовало когда я написал все что нужно в
Stas © (11.12.03 11:37) [7]


 
KSergey   (2003-12-12 12:11) [39]

Вы не знаете как вызвать ф-цию с именем CoInitialize??? ;)


 
Stas   (2003-12-12 12:24) [40]

KSergey © (12.12.03 12:11) [39]
НЕТ :-). Никогда не приходилось сталкиваться. Нужно ли какой нибудь модуль подключать ? и какие параметры туда писать? и вообще куда ее вписать ?
Заранее спасибо!



Страницы: 1 2 вся ветка

Форум: "Базы";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.01 c
7-37965
Евгыш
2003-10-31 11:43
2004.01.13
USB диск в качестве ключа


3-37528
Term
2003-12-16 10:59
2004.01.13
Как получить список узеров работающих в данный момент с базой


1-37608
mik_1
2003-12-28 18:29
2004.01.13
прерывание исполнения программы


7-37954
АСт
2003-11-01 16:47
2004.01.13
Запуск приложения


1-37640
Makhanev A.S.
2003-12-26 18:56
2004.01.13
Наследование форм: EResNotFound





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский