DLL hatasi. Invalid point operation.. DLL nasil yazilir.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 523
Kayıt: 05 May 2005 03:24
Konum: DelphiTürkiye.COM

DLL hatasi. Invalid point operation.. DLL nasil yazilir.

Mesaj gönderen hi_selamlar »

S.A. arkadaslar..

Lütfen su konuya bi bakin.

delphi de bir dll hazirlamam lazim. Dll asagidaki gibi..

Kod: Tümünü seç

library deneme;

uses
  SysUtils, ShareMem, Windows, Messages, Variants, Classes, Graphics,   
  Controls, Forms, Dialogs, ShellApi, WinSock;

function dizin_sil(dosya_veya_dizin_adi: string): boolean; export; stdcall;
var
  F: TSHFileOpStruct;
  From: string;
  Resultval: integer;
begin
  FillChar(F, SizeOf(F), #0);
  From := dosya_veya_dizin_adi + #0;
  Screen.Cursor := crHourGlass;
  try
    F.wnd   := 0;
    F.wFunc := FO_DELETE;
    F.pFrom := PChar(From);
    F.pTo   := nil;

    F.fFlags := FOF_ALLOWUNDO or
                FOF_NOCONFIRMATION or
                FOF_SIMPLEPROGRESS or
                FOF_FILESONLY;

    F.fAnyOperationsAborted := False;
    F.hNameMappings := nil;
    Resultval := ShFileOperation(F);
    Result := (ResultVal = 0);
  finally
    Screen.Cursor := crDefault;
  end;
end;
compile ediyorum. ok.

daha sonra asagidaki gibi delphi icinden cagiriyor ve kullaniyorum.


Kod: Tümünü seç

unit deneme;

interface

uses
  Windows, Messages, SysUtils, ShareMem, Variants, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

 function dizin_sil(dosya_veya_dizin_adi: string): boolean; stdcall; external 'deneme.dll;'

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if dizin_sil('C:\a.txt')<>true then
begin
// burada ilgili kodlar var..
end;

end;

end.
bir türlü calistiramadim. daha dogrusu calisiyor . fakat proje kapatilirken runtime gibi hatalar veriyor.

lütfen bu konu hakkkida bilgisi olan arkadaslar. cevaplarinizi bekliyorum

sevgiler ve saygilar..

tekrar S.A.
Herkes cahildir, bazi konularda.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

merhaba ,
http://www.codexterity.com/fastsharemem.htm
linkindeki uniti indir , DLL nin uses kısmına ilk başa ekle , ve DLL yi kullandığın unitin ilk başına ekle. artık sorun kalmayacaktır,
bunun nedeni String gibi dinamik diziler kullanıyor olman.
iyi çalışmalar.

NOT: Kullandığın ShareMem deklerasoynlarını heryerden kaldır.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 523
Kayıt: 05 May 2005 03:24
Konum: DelphiTürkiye.COM

Mesaj gönderen hi_selamlar »

hocam simde dll calisiyor.

her hangi bir fonksiyonu calistiriyorum. neticeyi aliyorum. 1 2 saniye sonra
hata veriyor.

neden ?
:(

baya zor durumdayiz yaw.. neden bu dll bu kadar zor yaw..
simde neden bu hatayi veriyor olabilir.
Herkes cahildir, bazi konularda.
Kullanıcı avatarı
ALUCARD
Üye
Mesajlar: 1270
Kayıt: 27 Eyl 2003 10:12
Konum: Samsun
İletişim:

Mesaj gönderen ALUCARD »

acaba hatanın tam olarak ne olduğunu ve hata metnini tam olarak yazarmısınız :lol:
بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ
Forumun 365. Üyesi
Hiç Bir Şey İnsan Kadar Yükselemez ve Alçalamaz

Erkan ÇAĞLAR
Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 523
Kayıt: 05 May 2005 03:24
Konum: DelphiTürkiye.COM

Mesaj gönderen hi_selamlar »

hocam DLL calisiyor. fakat arkasindan su hatalari veriyor.
hocam hata su.
resim link' i asagidadir.

http://img148.echo.cx/img148/51/hata3gb.jpg

http://img39.echo.cx/img39/1474/hata15ux.jpg

http://img273.echo.cx/img273/2440/hata25zs.jpg

lütfen bi bakarmisiniz.. ?

tesekkur ederim...
Herkes cahildir, bazi konularda.
Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 523
Kayıt: 05 May 2005 03:24
Konum: DelphiTürkiye.COM

Mesaj gönderen hi_selamlar »

S.A. arkadaslar..

Kod: Tümünü seç

library run;

{ 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
  FastShareMem,
  SysUtils,
  Classes;

{$R *.res}

function run_path :String;  stdcall;
begin
          result:=GetCurrentDir;
end;

exports
run_path;


begin
end.
 
delphi kullanimi ise söyle;

Kod: Tümünü seç

unit deneme;

interface

uses
  FastShareMem, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  function run_path :String;  stdcall; external 'run.dll';

var
  Form1: TForm1;
  hnd:THandle;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

         caption:=run_path;
end;

end.
ondan sonra yukaridaki resimlerde bulunan hatalari veriyor..
baya sikistik bu konuda. lütfen biz bakarsaniz sevinirim.

S.A.
Herkes cahildir, bazi konularda.
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

kardeşim, String yerine Pchar çıktısı ver.
Çünkü Kullandığın Api Pchar çıktısı veriyor. Bizede bu hata çok kafayı yetirtmişti. Pchar çıktısı verdikten sonra delphide run.dll'den import ettiğin function'da da çıktısını pchar yap.
Sonrasında bunu bir değişkene alıp stringe sonra çevirirsin.
hey gidi #10'lu günler heyy. :roll:
Kullanıcı avatarı
huseyinkucuk
Üye
Mesajlar: 142
Kayıt: 29 Nis 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen huseyinkucuk »

Evet, ben de bu problemden çok çektim. Dinamik dizileri pointer kullanarak döndürürsen (stringi pchar kullanarak, kendi tanımladığın dizileri pointer tipi yardımıyla vb...) sorun çıkacağını sanmıyorum (En azından ben bu problemi böyle aşmıştım). Kolay gelsin...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Cevapla