🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi.bazy-danych
Article #82978

Re: Delphi i Oracle przez oci.dll

#82978
From: Roman Tyczka
Date: Tue, 27 Nov 2018 19:23
67 lines
2802 bytes
On Tue, 27 Nov 2018 06:14:46 -0800 (PST), immo wrote:

> Tak dla "zabawy" przenoszę sobie jeden obiekt z C++Buildera na Delphi.
> Łączy się on z Oracle przez funkcje zawarte w oci.dll.
> 
> I ogólnie wszystko działało do momentu przepisania funkcji OCILogon
> deklarowanej jako:
> 
> //sword   OCILogon (OCIEnv *envhp, OCIError *errhp, OCISvcCtx **svchp,
> //                  const OraText *username, ub4 uname_len,
> //                  const OraText *password, ub4 passwd_len,
> //                  const OraText *dbname, ub4 dbname_len);
>   function OCILogon(
>     envhp: Pointer;
>     errhp: Pointer;
>     var svchp: Pointer;
>     username: Pointer;
>     uname_len: ub4;
>     password: Pointer;
>     passwd_len: ub4;
>     dbname: Pointer;
>     dbname_len: ub4
>   ): sword; cdecl; external WINDOWS_DLL_LOCATION;

A nie powinno być może tak?

   function OCILogon(
     envhp: Pointer;
     errhp: Pointer;
     var svchp: Pointer;
     const username: Pointer;
     uname_len: ub4;
     const password: Pointer;
     passwd_len: ub4;
     const dbname: Pointer;
     dbname_len: ub4
   ): sword; cdecl; external WINDOWS_DLL_LOCATION;

I też warto sprawdzić stdcall, zdarzało mi się stdcall używać na dllkach
obcych, gdy cdecl nie działało. Choć głowy nie dam w czym były pisane, ale
warto sprawdzić.
 
> Niestety za nic nie chce mi to zadziałać w Delphi, pomimo że w C++Builderze działa poprawnie. W Delphi jako result dostaję zawsze -1.
> 
> Funkcję wywołuję tak:
>   _retCode := OCILogon(
>     OCIEnvHP,
>     OCIErrHP,
>     OCISrvCHP,
>     @_otu,
>     _otuL,
>     @_otp,
>     _otpL,
>     @_otd,
>     _otdL
>   );
> 
> Gdzie _otu, _otp, _otd to TByteArray

z zerem na końcu? Wiem, że jest len podany, ale może wewnątrz tej metody
ktoś zahardcodował kopiowanie bufora + 1 bajt null terminatora i jest
wyjście poza bufor? :-)


-- 
pozdrawiam
Roman Tyczka
Technical Details
Message-ID: <1968f1k2q7g7c$.dlg@tyczka.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
References: <a1ed2220-017c-491a-8e6e-fa3476b3a332@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
From: Roman Tyczka <noemail@because.no>
Newsgroups: pl.comp.lang.delphi.bazy-danych
Subject: Re: Delphi i Oracle przez oci.dll
Date: Tue, 27 Nov 2018 20:23:34 +0100
Organization: ATMAN - ATM S.A.
Lines: 67
Sender: romek@tyczka.no.found
Message-ID: <1968f1k2q7g7c$.dlg@tyczka.com>
References: <a1ed2220-017c-491a-8e6e-fa3476b3a332@googlegroups.com>
NNTP-Posting-Host: ip-94-75-90-137.wave.com.pl
Mime-Version: 1.0
X-Trace: node1.news.atman.pl 1543346614 9058 94.75.90.137 (27 Nov 2018 19:23:34 GMT)
X-Complaints-To: usenet@atman.pl
NNTP-Posting-Date: Tue, 27 Nov 2018 19:23:34 +0000 (UTC)
User-Agent: 40tude_Dialog/2.0.15.84
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit