Dll uygulaması ile ilgili

Başlatan bunalmis, 09 Nisan 2010, 21:27:37

Klein

#15
Hocam sanırım sorun Delphinin  string formatı ile Windows'un string formatı arasındaki uyumsuzluktan kaynaklanıyor. Delphide metnin ilk baytı  metin uzunluğunu veriyor , windows'ta  ise bildiğimiz sıfır sonlu katar sistemi kullanılıyor.

Sorunu çözmek için "string" yerine  , windows ile uyumlu tip olan "pchar" tipini kullanmalısınız.

Ama hatanın metnini değil de  kodunu gönderip bunu program içerisinde metne çevirme yöntemini  neden kullanmadığınızı da merak ettim doğrusu.

function returnstring_DLL_Test(a:integer ; b:integer ):pchar;
var x:integer;
Begin
    x:= a+b;
    result:=pchar(inttostr(x));
End;

z

Kodlama yontemini,  program kodlarina bakarken bu ne hatasiymis diye dusunmek gerektirdigi icin
sevmiyorum. Ancak isin icinden cikamadim ve mecburen dediginiz gibi her hataya bir kod verip karsi tarafta buna karsilik
aciklama yapacagim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

#17
Global alanda degiskenleri tanimlarken

var
Hata: Array [0..30] of string;

Seklinde tanimlama yaptigimizda

Hata[0]:='Ok'
Hata[1]:='xxxx'
Hata[2]:='yyyy'
Hata[3]:='zzzz'
....
....

Seklinde deger atamasini  kod isletmeden yapabilirmiyim?   (a:integer=1; da oldugu gibi)

Bu islemi degisken degilde const nasil yaparim?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

const errmsg:array[0..2] of string =('ahmet','mehmet','hasan');

orhanc

const

   Days : array[0..6] of string =  (  'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'  ) ;
i'm doing nothing... Giddy Up  http://www.drorhan.com

Klein

const renkler : array[0..2] of string =('kırmızı','mavi','yeşil');

şeklinde de olabilir.

veya

const aylar : array[0..2] of string =( 'ocak' , 'şubat' , 'mart' );

şeklinde farklı bir düzenleme de getirilebilir.

XOR

Delphi'de (en azından CodeGear 2007'de) Yeni bir dll projesi açtığınızda proje kodunun tepesinde aşağıdaki comment yer alır.
Özetle WideString kullanmak istiyorsanız dll'inizi BORLNDMM.DLL ile birlikte dağıtmanız ve buna uygun kodlama yapmanız lazım.
Bundan kaçınmak için iki yol var ya parametreleriniz ShortString yapmalısınız yada PChar kullanmalısınız.


Elinizdeki her hangi bir string'i pchar'a çevirmek de kolay PChar(s) ile (Compiler Option'larında "huge strings" işaretliyse) direk çevirebilirsiniz.
İşaretli değilse çevrimi yapmanız gereken yerde
{$H+}
PChar(s)
{$H-}
yaparsınız olur biter.

Kolay Gelsin.

{ 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. }