EResNotFound dla DataModule w dll

0

Witam,
testuję, szukam i rozwiązania nie mogę znaleźć. Mam aplikację składającą się z exe i dll. Dll jest tylko do obliczeń, bez żadnych formatek. Lokalizuję aplikację. Z exe nie ma problemu. Korzystam z TsiLang. Do tłumaczenia potrzebuję na formatce umieścić komponent nie wizualny, sama formatka również jest potrzebna do trzymania tłumaczenia (taki wymóg komponentu). Problem jest z dll. Dodałem DataModule żeby trzymać ten komponent w dll. No i tutaj zaczynają się schody. Dll ładowana jest statycznie. Żeby tłumaczenie ruszyło muszę stworzyć DataModule i w OnCreate komponent tłumaczy co trzeba. Tylko, że przy tym tworzeniu wywala mi ciągle błąd EResNotFound. W projekcie dll mam {$R *.res}. W unicie z DataModule mam

var
  DataModule1: TDataModule1;

implementation

{%CLASSGROUP 'System.Classes.TPersistent'}

{$R *.dfm}

.pas, .dfm, .dcu wszystko jest na swoim miejscu i istnieje. Sam DataModule tworzę podczas wywoływania jedynej funkcji z mojej biblioteki w taki sposób:

DataModule1 := TDataModule1.Create(DataModule1);

Spotkał się ktoś z czymś podobnym? Skończyły mi się pomysły, na forum znalazłem kilka tematów z EResNotFound ale nic nie pomogły. Google też nie ma konkretnego rozwiązania. Podczas debugowania w komunikacie o błędzie też nie mam żadnych dodatkowych informacji:
resnotfound.PNG

0

A próbowałeś tworzyć DataModule w taki sposób:

library Project2;

uses
  System.SysUtils,
  System.Classes,
  WinApi.Windows;

{$R *.res}

procedure MyDLLProc(Reason: Integer);
begin
  case Reason of
    DLL_PROCESS_ATTACH:
      begin
        //tworzysz data module
      end;
    DLL_PROCESS_DETACH:
      begin
        //zwalniasz data module
      end;
  end;
end;

begin
   DllProc:= @MyDLLProc;
end.
0

@kAzek właśnie próbowałem ale nie dostaję żadnego wywołania DLL_PROCESS_ATTACH. Mam kilka DLL_THREAD_ATTACH, później tyle samo DLL_THREAD_DETACH i jedno DLL_PROCESS_DETACH. Chyba przez to statyczne wywołanie. Jak dam tworzenie raz do DLL_THREAD_ATTACH to dalej ten sam błąd + jeszcze większe maliny.

0

DLL_PROCESS_ATTACH to odpowiednik tego co pomiędzy begin a end wiec spróbuj tam tworzyć (zwalniasz przy DLL_PROCESS_DETACH) zresztą dlatego może w Delphi tego nie ma (nie pamiętam dawno się nie bawiłem w takie coś).
DLL_THREAD_ATTACH to przy wątku wiec z tego wiadomo że wyjdą jakieś dziwne rzeczy...

0

W begin ```
end

0

EUREKA!!! Zrezygnowany przystąpiłem do przenoszenia moich komunikatów z dll do exe. Na koniec chciałem sprawdzić jeszcze jedną rzecz. Wywaliłem komponent językowy z DataModule. Kompilacja, odpalenie, działa. Wstawiłem komponent ponownie. Kompilacja, odpalenie działa. Uruchomiłem proces translacji komunikatów. Komponent dodał kilka wpisów do unitu. Kompilacja, odpalenie, nie działa. Sprawdzam co było dodane do unitu. Jedna procedura to podmiany tekstu i uruchomienie tej procedury z Create DataModule. Komentuje to i działa dobrze. Wstawiłem aktualizację tłumaczenia w dalszej części kodu dll i voila :D Nie wiem czemu wcześniej tego nie zauważyłem. Tworzenie DataModule sprawdziłem wg. kilku metod i wszystko działa poprawnie. Ostatecznie zrobiłem to przez initialization i finalization w unicie z DataModule.

1 użytkowników online, w tym zalogowanych: 0, gości: 1