Bir Dll in delphiden çağrılması

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ikut

Bir Dll in delphiden çağrılması

Mesaj gönderen ikut »

Merhaba

Bir Dll var elimde. Bunu delphi içinden kullanmam gerek. Teorik bazı bilgilerim var ama olayı tam çözemedim. Aşağıda bu dll i kullanan c++ kodu ve en altta headeri var.

Ben programımda bu dll i kullanmak için ne yapmalıyım. ?

Bilenler yardımcı olursa sevinirim.

Saygılar

Kod: Tümünü seç

//---------------------------------------------------------------------------
/*

Copyright 2001 Symbol Technologies, All Rights Reserved

*/
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop

#include "KF1.h"
#include "csp2.h"
#include "TimeDlg.h"
#include <dir.h>
#include <string.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

//---------------------------------------------------------------------------
#define MAXSIZE ((long)16384)

bool ComStarted=false,AutoMode=false;
int Port=0,ret;
char stmp[256];

//---------------------------------------------------------------------------
int __stdcall csp2PollCallBack(void)
{
unsigned char barcode[100],t1[20];
unsigned char t2[400];
int n,l,l1,i;
long ret;

       Form1->Memo1->Lines->Add("CallBack! Attempting UpLoad...");
       ret=csp2ReadData();
       sprintf(stmp,"Upload Response %d",ret);
       Form1->Memo1->Lines->Add(stmp);
       if (ret>0) {
         l=ret;
         for (n=0;n<l;n++){
           ret=csp2GetPacket(barcode,n,sizeof(barcode));
           if (ret>0) {
             l1=ret;
             sprintf(t2,"Rcvd:  ");
             for (i=1;i<l1;i++) {
               sprintf(t1,"%02X ",barcode[i]);
               strcat(t2,t1);
               }
             Form1->Memo1->Lines->Add((char *)t2);
             }
           }
         Sleep(250);
         csp2WakeUp();
         Sleep(500);
         Form1->Memo1->Lines->Add("Attempting Clear");
         ret=csp2ClearData();
         sprintf(stmp,"Clear Response %d",ret);
         Form1->Memo1->Lines->Add(stmp);
         csp2PowerDown();
		 }

    return(0);
}

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::cbPortIDChange(TObject *Sender)
{
String s;

    Port=cbPortID->ItemIndex;
    s=cbPortID->Items->Strings[cbPortID->ItemIndex] ;
    Memo1->Lines->Add(s);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::btnExitClick(TObject *Sender)
{
    exit(0);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::btnOpenClick(TObject *Sender)
{
    ret=csp2Init(Port);
    if (ret==STATUS_OK) {
      ComStarted=true;
      Memo1->Lines->Add(cbPortID->Items->Strings[Port]+" Opened");
      sBar1->Panels->Items[2]->Text=cbPortID->Items->Strings[Port]+" Open";
      }
    else {
      ComStarted=false;
      Memo1->Lines->Add("Attempt to open "+cbPortID->Items->Strings[Port]+" Failed");
      sBar1->Panels->Items[2]->Text="No Open Port";
      }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
char s1[20];
char s2[40];
long ret;

    Memo1->Lines->Clear();
    cbPortID->ItemIndex=0;
    strcpy(s1,"XXX");
    ret=csp2GetDllVersion(s1, sizeof(s1));
    if (ret>=0){
      sprintf(s2,"DLL Ver: %s",s1);
      sBar1->Panels->Items[0]->Text=s2;
      }
    sBar1->Panels->Items[2]->Text="No Open Port";
    sBar1->Panels->Items[3]->Text="Manual CS1504 Read Mode";

}
//---------------------------------------------------------------------------

void __fastcall TForm1::btnUploadClick(TObject *Sender)
{
unsigned char barcode[100],t1[40];
unsigned char t2[400],timeStamp[6],codetype,t3[30],t4[40];
int n,l,l1,i;

    if (!ComStarted) {
      Memo1->Lines->Add("Cannot Upload - No Open Port");
      return;
      }
    Memo1->Lines->Add("Attempting UpLoad");
    ret=csp2ReadData();
    sprintf(stmp,"Upload Response %d",ret);
    Memo1->Lines->Add(stmp);
      if (ret>=0) {
         l=ret;

         ret=csp2GetDeviceId(t3, 9);
         strcpy(t2,"Device ID = ");
         if (ret>0) {
           for (i=0;i<ret;i++) {
             sprintf(t4,"%2X ",t3[i]);
             strcat(t2,t4);
             }
           }
         else strcat(t2,"Error!");
         Memo1->Lines->Add((char *)t2);

         ret=csp2GetProtocol();
         sprintf(t2,"Protocol = %2X",(unsigned char) ret);
         Memo1->Lines->Add((char *)t2);

         ret=csp2GetSystemStatus();
         sprintf(t2,"System Status = %2X",(unsigned char) ret);
         Memo1->Lines->Add((char *)t2);

         ret=csp2GetSwVersion(t3, 9);
         strcpy(t2,"SW Version = ");
         if (ret>0) {
           strncat(t2,t3,9);
           }
         else strcat(t2,"Error!");
         Memo1->Lines->Add((char *)t2);


         for (n=0;n<l;n++){
           ret=csp2GetPacket(barcode,n,sizeof(barcode));
           if (ret>5) {       // Assuming Ascii mode with timestamp
            codetype=barcode[1];
            if (codetype>15) codetype=15;
            l1=ret-4;
            for (i=0;i<4;i++) timeStamp[i]=barcode[l1++];
            l1=2;
            for (i=0;i<(ret-6);i++) t1[i]=barcode[l1++];
            t1[i]=0;
            csp2TimeStamp2Str(timeStamp, t3, 29);
            csp2GetCodeType(codetype,t4,39);
            sprintf(t2,"Type %s, %s, TimeStamp %s",t4,t1,t3);
            Memo1->Lines->Add((char *)t2);
            }
         }
       }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::btnClearClick(TObject *Sender)
{
    if (!ComStarted) {
      Memo1->Lines->Add("Cannot Clear - No Open Port");
      return;
      }
    Memo1->Lines->Add("Attempting Clear Cmd");
    ret=csp2ClearData();
    sprintf(stmp,"Clear Response %d",ret);
    Memo1->Lines->Add(stmp);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
long ret;
    if (ComStarted) {
      ret = csp2GetCTS();
      if (ret<0) {
        sBar1->Panels->Items[1]->Text="CTS: -";
        return;
        }
      if (ret==0)sBar1->Panels->Items[1]->Text="CTS: Clear";
      else sBar1->Panels->Items[1]->Text="CTS: Set";
     }
    else sBar1->Panels->Items[1]->Text="CTS: -";

}
//---------------------------------------------------------------------------

void __fastcall TForm1::btnGetTimeClick(TObject *Sender)
{
unsigned char buf[10], AMPM[4];

        long rc;


   if (!ComStarted) {
      Memo1->Lines->Add("Cannot Get Data - No Open Port");
      return;
      }
    ret=csp2GetTime(buf);
    csp2PowerDown();
    strcpy(AMPM,"AM");
    if (buf[2]>12){
      buf[2]-=12;
      AMPM[0]='P';
      }
    if (buf[2]==0) buf[2]=12;
    sprintf(stmp,"Get Time Response %d:%02d:%02d %s %d/%0d/%02d",
       buf[2],buf[1],buf[0],AMPM,buf[4],buf[3],buf[5]);
    Memo1->Lines->Add(stmp);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::btnSetTimeClick(TObject *Sender)
{
unsigned char buf[10];
AnsiString s;

   if (!ComStarted) {
      Memo1->Lines->Add("Error - No Open Port");
      return;
      }

    if (dlgTime->ShowModal() != mrOk) {
      MessageBeep(0);
      return;
      }
    s=dlgTime->pckTime->Time.FormatString("ss nn hh");

    buf[0]= StrToInt(s.SubString(1,2));  // seconds
    buf[1]= StrToInt(s.SubString(4,2));  // minutes
    buf[2]= StrToInt(s.SubString(7,2));  // hours

    s=dlgTime->Calendar->Date.FormatString("dd mm yy");

    buf[3]= StrToInt(s.SubString(1,2));  // day
    buf[4]= StrToInt(s.SubString(4,2));  // month
    buf[5]= StrToInt(s.SubString(7,2));  // year

    ret=csp2SetTime(buf);
    sprintf(stmp,"Set Time Response %d",ret);
    Memo1->Lines->Add(stmp);
    csp2PowerDown();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::btnAutoClick(TObject *Sender)
{
AnsiString s;
long ret;

   if (!ComStarted) {
      Memo1->Lines->Add("Error - No Open Port");
      return;
      }
   if (AutoMode) {
     ret=csp2StopPolling();
     sprintf(stmp,"Stop Polling Response %d",ret);
     Memo1->Lines->Add(stmp);
     sBar1->Panels->Items[3]->Text="Manual CS1504 Read Mode";
     btnAuto->Caption="Auto Read";

     }
   else {
     ret=csp2StartPolling(&csp2PollCallBack);
     sprintf(stmp,"Start Polling Response %d",ret);
     Memo1->Lines->Add(stmp);
     sBar1->Panels->Items[3]->Text="Automatic CS1504 Read Mode";
     btnAuto->Caption="Man. Read";
     csp2WakeUp();
     }
   AutoMode=!AutoMode;

}
//---------------------------------------------------------------------------

Kod: Tümünü seç

/*******************************************************************************
*                      
*  Filename:      K:\keyfob\tony\winfob\Csp2.h
*
*  Copyright(c) Symbol Technologies Inc., 2001
*  
*  Description:     This file provides the user API interface
*                   function prototypes for Symbol's CS1504 Consumer Scanning 
*                   Products as Dynamic Link Library. When 
*                   compiled into a DLL, the user can access 
*                   all of the functions available for the 
*                   Symbol CS1504.
*
*  Author:          Tony Russo
*
*  Creation Date:   4/04/2001
*
*  Derived From:    New File
*
*  Edit History:
*   $Log:   U:/keyfob/archives/winfob/examples/borlandc/CSP2.H_V  $
 * 
 *    Rev 1.0   Jan 29 2002 14:02:52   pangr
 * Initial revision.
* 
*    Rev 1.0   05 Apr 2001 09:24:16   RUSSOA
* Initial revision.
*
*
*	Added Polling headers and helper functions 4/6/01 CWB
*******************************************************************************/
                    
/*******************************************************************************
* Include Files
*******************************************************************************/

/*******************************************************************************
* Defines
*******************************************************************************/ 
#ifdef DLL_IMPORT_EXPORT
    #undef DLL_IMPORT_EXPORT
#endif

#ifdef DLL_SOURCE_CODE
    #define DLL_IMPORT_EXPORT __declspec(dllexport) __stdcall
#else
    #define DLL_IMPORT_EXPORT __declspec(dllimport) __stdcall
#endif

#ifdef __cplusplus
    #define NoMangle extern "C"
#else
    #define NoMangle
#endif

// Returned status values...
#define STATUS_OK                   ((long) 0)
#define COMMUNICATIONS_ERROR        ((long)-1)  
#define BAD_PARAM                   ((long)-2)
#define SETUP_ERROR                 ((long)-3)
#define INVALID_COMMAND_NUMBER      ((long)-4)  
#define COMMAND_LRC_ERROR           ((long)-7)  
#define RECEIVED_CHARACTER_ERROR    ((long)-8)  
#define GENERAL_ERROR               ((long)-9)  
#define FILE_NOT_FOUND              ((long) 2)
#define ACCESS_DENIED               ((long) 5)

// Parameter values...
#define PARAM_OFF                   ((long) 0) 
#define PARAM_ON                    ((long) 1) 

#define DETERMINE_SIZE              ((long) 0)

/*******************************************************************
 *              Communications setup section...                    *
 *******************************************************************/

#ifndef COM1
    #define COM1                    ((long) 0)
    #define COM2                    ((long) 1)
    #define COM3                    ((long) 2)
    #define COM4                    ((long) 3)
    #define COM5                    ((long) 4)
    #define COM6                    ((long) 5)
    #define COM7                    ((long) 6)
    #define COM8                    ((long) 7)
    #define COM9                    ((long) 8)
    #define COM10                   ((long) 9)
    #define COM11                   ((long)10)
    #define COM12                   ((long)11)
    #define COM13                   ((long)12)
    #define COM14                   ((long)13)
    #define COM15                   ((long)14)
    #define COM16                   ((long)15)
#endif

/*******************************************************************************
* Public Variables
*******************************************************************************/ 

/*******************************************************************************
* Local Variables
*******************************************************************************/ 

/*******************************************************************************
* Public Function Prototypes 
*******************************************************************************/ 
// Communications
NoMangle long DLL_IMPORT_EXPORT csp2Init(long nComPort);
NoMangle long DLL_IMPORT_EXPORT csp2Restore(void);
NoMangle long DLL_IMPORT_EXPORT csp2WakeUp(void);
NoMangle long DLL_IMPORT_EXPORT csp2DataAvailable(void);

// Basic Functions
NoMangle long DLL_IMPORT_EXPORT csp2ReadData(void);
NoMangle long DLL_IMPORT_EXPORT csp2ClearData(void);
NoMangle long DLL_IMPORT_EXPORT csp2PowerDown(void);
NoMangle long DLL_IMPORT_EXPORT csp2GetTime(unsigned char aTimeBuf[]);
NoMangle long DLL_IMPORT_EXPORT csp2SetTime(unsigned char aTimeBuf[]);
NoMangle long DLL_IMPORT_EXPORT csp2SetDefaults(void);

// CSP Data Get
NoMangle long DLL_IMPORT_EXPORT csp2GetPacket(char szBarData[], long nBarcodeNumber, long nMaxLength);
NoMangle long DLL_IMPORT_EXPORT csp2GetDeviceId(char szDeviceId[8], long nMaxLength);
NoMangle long DLL_IMPORT_EXPORT csp2GetProtocol(void);
NoMangle long DLL_IMPORT_EXPORT csp2GetSystemStatus(void);
NoMangle long DLL_IMPORT_EXPORT csp2GetSwVersion(char szSwVersion[9], long nMaxLength);
NoMangle long DLL_IMPORT_EXPORT csp2GetASCIIMode(void);
NoMangle long DLL_IMPORT_EXPORT csp2GetRTCMode(void);

// DLL Configuration
NoMangle long DLL_IMPORT_EXPORT csp2SetRetryCount(long nRetryCount);
NoMangle long DLL_IMPORT_EXPORT csp2GetRetryCount(void);

// Miscellaneous
NoMangle long DLL_IMPORT_EXPORT csp2GetDllVersion(char szDllVersion[], long nMaxLength);
NoMangle long DLL_IMPORT_EXPORT csp2TimeStamp2Str(unsigned char *Stamp, char *value, long nMaxLength);
NoMangle long DLL_IMPORT_EXPORT csp2GetCodeType(unsigned long CodeID, char *CodeType, long nMaxLength);

// Advanced functions
NoMangle long DLL_IMPORT_EXPORT csp2ReadRawData(char aBuffer[], long nMaxLength);
NoMangle long DLL_IMPORT_EXPORT csp2SetParam(long nParam, char szString[], long nMaxLength);
NoMangle long DLL_IMPORT_EXPORT csp2GetParam(long nParam, char szString[], long nMaxLength);
NoMangle long DLL_IMPORT_EXPORT csp2Interrogate(void);
NoMangle long DLL_IMPORT_EXPORT csp2GetCTS(void);
NoMangle long DLL_IMPORT_EXPORT csp2SetDTR(long nOnOff);
NoMangle long DLL_IMPORT_EXPORT csp2SetDebugMode(long nOnOff);
NoMangle long DLL_IMPORT_EXPORT csp2StartPolling(FARPROC csp2CallBack);
NoMangle long DLL_IMPORT_EXPORT csp2StopPolling(void);

/*******************************************************************************
* Local Functions Prototypes
*******************************************************************************/ 

/*******************************************************************
 *                       End of file                               *
 *******************************************************************/
ikut

Çalışmaya devam

Mesaj gönderen ikut »

Gerekli import unitesini nasıl yazacağım ve kullancağım diyordum. Dr bob un bir kodu varmış header converter. elimdeki H file ı ve dll i verince bana bir delphi pas dosyası vardı. bakalım geri kalanında ne yapacağız gerçi artık iş o kadar zor olmasa gerek....

Saygılar
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

Çevirmek isdtediğin dll'in kodlarına hızlıca göz attığımda, fonksiyonlarında dikkat etmen gereken bir kaç nokta var. Birincisi __stdcall yazan yerlerdeki fonksiyonlar, delphide de stdcall olarak tanımlıdır. Aşağıda stdcall için bir örnek var:

Kod: Tümünü seç

//eğer çıktısı void ise procedure, değilse function
//örnek olarak NoMangle long DLL_IMPORT_EXPORT csp2Init(long nComPort);
function csp2Init(ComPort: LongInt): LongInt; stdcall; external 'bilmemne.dll';
stdcall olduğunu nereden çıkardım dersen, DLL_IMPORT_EXPORT tanımlamasına bakabilirsin. Eğer long, int, char*, gibi sana tanıdık gelmeyen bir tanımlama varsa mesela NoMongle gibi, onun tanımlamasını yukarıda görebilirsin. Burada ekstra bir şey yapmana gerek yok. Sadece stdcall olup olmadığına ve fonksiyonmu, procedure mü olduğuna bakman yeterlidir. Böylece tanımlı tüm fonksiyonları bu şekilde bir unitde interface kısmına yazarsan, delphi header dosyan oluşmuş olur.
İkinci olarak, define ile tanımlı olan bazı sabit değerler var. bunları da const altına yazabilirsin. Aşağıda örnek mevcut:

Kod: Tümünü seç

//örnek olarak aşağıdaki satırları çevirelim
//#define STATUS_OK                   ((long) 0)
//#define COMMUNICATIONS_ERROR        ((long)-1) 
//#define BAD_PARAM                   ((long)-2) 

const
  STATUS_OK = 0;
  COMMUNICATIONS_ERROR = -1;
  BAD_PARAM = -2;
Bunun dışında seni kasacak ekstra bir şey yok. Bunları, yani fonksiyon tanımlamalarını ve sabitleri bir unit dosyasında toplar(interface kısmında) ve bunu istediğin bir dosyadan uses kısmına eklersen, buradaki fonksiyonları kullanabilirsin.
ikut

Mesaj gönderen ikut »

Merhaba

ben kendimce şöyle birşey yaptım.....

sanırım dediğin gibi... ancak bu uniti usesda eklediğim bir yerden

Kod: Tümünü seç

  Ret:=csp2Init(2);
  ShowMessage(IntToStr(Ret));
diye çağırdığımda -1 değeri geliyopr. kısaca erişim hala sağlanamadı.... bc++ ile yapılan örnek çatır çatır çalışıyor ama. bu dll olayını aşamadım bir türlü.

Kod: Tümünü seç

unit CspReader;

interface

const
  STATUS_OK                : Integer=  0;
  COMMUNICATIONS_ERROR     : Integer= -1;
  BAD_PARAM                : Integer= -2;
  SETUP_ERROR              : Integer=-3;
  INVALID_COMMAND_NUMBER   : Integer=-4;
  COMMAND_LRC_ERROR        : Integer=-7;
  RECEIVED_CHARACTER_ERROR : Integer=-8;
  GENERAL_ERROR            : Integer=-9;
  FILE_NOT_FOUND           : Integer= 2;
  ACCESS_DENIED            : Integer= 5;

{/// Parameter values... }
  PARAM_OFF      : Integer=0;
  PARAM_ON       : Integer=1;
  DETERMINE_SIZE : Integer=0;
{+//****************************************************************** }
{-* Communications setup section...* }
{=****************************************************************** }
{$IFNDEF COM1}
const
  COM1  :Integer= 0;
  COM2  :Integer= 1;
  COM3  :Integer= 2;
  COM4  :Integer= 3;
  COM5  :Integer= 4;
  COM6  :Integer= 5;
  COM7  :Integer= 6;
  COM8  :Integer= 7;
  COM9  :Integer= 8;
  COM10 :Integer= 9;
  COM11 :Integer=10;
  COM12 :Integer=11;
  COM13 :Integer=12;
  COM14 :Integer=13;
  COM15 :Integer=14;
  COM16 :Integer=15;
{$ENDIF}


  Function csp2Init(nComPort: LongInt): Longint; stdcall; External 'csp2.dll';
  Function csp2Restore       :Longint;  stdcall; External 'csp2.dll';
  Function csp2WakeUp        :Longint;  stdcall; External 'csp2.dll';
  Function csp2DataAvailable :Longint;  stdcall; External 'csp2.dll';
{/// Basic Functions }
  Function csp2ReadData                 : Longint; stdcall; External 'csp2.dll';
  Function csp2ClearData                : Longint; stdcall; External 'csp2.dll';
  Function csp2PowerDown                : Longint; stdcall; External 'csp2.dll';
  Function csp2GetTime(aTimeBuf:string) : Longint; stdcall; External 'csp2.dll';
  Function csp2SetTime(aTimeBuf:string) : Longint; stdcall; External 'csp2.dll';
  Function csp2SetDefaults              : Longint; stdcall; External 'csp2.dll';
{/// CSP Data Get }
  Function csp2GetPacket(szBarData:string;nBarcodeNumber: LongInt;nMaxLength: LongInt): Longint; stdcall; External 'csp2.dll';
  Function csp2GetDeviceId(szDeviceId:string; nMaxLength: LongInt) : Longint; stdcall; External 'csp2.dll';
  Function csp2GetProtocol     : Longint; stdcall; External 'csp2.dll';
  Function csp2GetSystemStatus : Longint; stdcall; External 'csp2.dll';
  Function csp2GetSwVersion(szSwVersion: string; nMaxLength: LongInt): Longint; stdcall; External 'csp2.dll';
  Function csp2GetASCIIMode :  Longint; stdcall; External 'csp2.dll';
  Function csp2GetRTCMode   :  Longint; stdcall; External 'csp2.dll';
{/// DLL Configuration }
  Function csp2SetRetryCount(nRetryCount: LongInt): Longint; stdcall; External 'csp2.dll';
  Function csp2GetRetryCount : Longint; stdcall; External 'csp2.dll';
{/// Miscellaneous }
  Function csp2GetDllVersion(szDllVersion: string;nMaxLength: LongInt): Longint; stdcall; External 'csp2.dll';
  Function csp2TimeStamp2Str(var Stamp: Byte;value: PChar;nMaxLength: LongInt): Longint; stdcall; External 'csp2.dll';
  Function csp2GetCodeType (CodeID: LongInt;CodeType: PChar;nMaxLength: LongInt): Longint; stdcall; External 'csp2.dll';
{/// Advanced functions }
  Function csp2ReadRawData (aBuffer: string;nMaxLength: LongInt): Longint; stdcall; External 'csp2.dll';
  Function csp2SetParam(nParam: LongInt;szString: string;nMaxLength: LongInt):  Longint; stdcall; External 'csp2.dll';
  Function csp2GetParam(nParam: LongInt;szString: string;nMaxLength: LongInt):  Longint; stdcall; External 'csp2.dll';
  Function csp2Interrogate:  Longint; stdcall; External 'csp2.dll';
  Function csp2GetCTS: Longint; stdcall; External 'csp2.dll';
  Function csp2SetDTR       (nOnOff: LongInt):  Longint; stdcall; External 'csp2.dll';
  Function csp2SetDebugMode (nOnOff: LongInt):  Longint; stdcall; External 'csp2.dll';
  Function csp2StartPolling (csp2CallBack: Pointer):  Longint; stdcall; External 'csp2.dll';
  Function csp2StopPolling: Longint; stdcall; External 'csp2.dll';

var
  ComStarted     : Boolean;
  Ret            : Longint;

implementation


end.
[/code]
ikut

Mesaj gönderen ikut »

Gülermisin ağlarmısın;

com2=1; duruyor orda; haliyle ben com3 u kalkmışım kodla..

zor oldu ama buldum
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

string'leri Pchar yapmalısın. char'ın arrayi string değil PChar'dır. Ayrıca eğer bir uzunluk belirlenmişse mesela [8] gibi, PChar[8] şeklinde tipi tanımlamalısın. Ardından şöyle bir şey girdiğinde sonuç gelmeli:

Kod: Tümünü seç

var
  s: PChar[20];
begin
  ret: =csp2GetDllVersion(s, Length(s));
  if ret>=0
  begin
    ShowMessage("Dll Version: " + string(s));
  end; 
end;
ikut

Mesaj gönderen ikut »

fatihtolgaata yazdı:string'leri Pchar yapmalısın. char'ın arrayi string değil PChar'dır. Ayrıca eğer bir uzunluk belirlenmişse mesela [8] gibi, PChar[8] şeklinde tipi tanımlamalısın. Ardından şöyle bir şey girdiğinde sonuç gelmeli:

Kod: Tümünü seç

var
  s: PChar[20];
begin
  ret: =csp2GetDllVersion(s, Length(s));
  if ret>=0
  begin
    ShowMessage("Dll Version: " + string(s));
  end; 
end;
pchar[20] yazınca hata alıyorum ama... derleme parametrelerindemi bir sorun var ?
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

ikut yazdı:pchar[20] yazınca hata alıyorum
:) dalgınlığıma gelmiş. Kodu denemeden yollamıştım. string de köşeli parantezler ile uzunluk belirtilebiliyor ama, pchar'da olmuyor. Ama önemli değil. Direk olarak Pchar yazsanız da olur. Length(s) yerine de sabit sayı girmeniz kafi, 20 gibi..
ikut

Mesaj gönderen ikut »

fatihtolgaata yazdı:
ikut yazdı:pchar[20] yazınca hata alıyorum
:) dalgınlığıma gelmiş. Kodu denemeden yollamıştım. string de köşeli parantezler ile uzunluk belirtilebiliyor ama, pchar'da olmuyor. Ama önemli değil. Direk olarak Pchar yazsanız da olur. Length(s) yerine de sabit sayı girmeniz kafi, 20 gibi..
merhaba.. öncelikle tesekkur ederim. bir çok sorun çözüldü geriye sadece bu char array sorunu kaldı..

pchar denedim bilgi boş geldi. (kor örnekleri dll pas threadimde mevcut)
char array olmadı
string olmadı
wide string gene olmadı

tıkandım
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

Aşağıdaki fonksiyon için sadece aşağıdaki yazdıklarımı denermisin. Ben bu şekilde bir çok c++ header'ını çevirdim ve hiç bir sorun yaşamadım.

Kod: Tümünü seç

//NoMangle long DLL_IMPORT_EXPORT csp2GetDllVersion(char szDllVersion[], long nMaxLength); 
interface
  function csp2GetDllVersion(szDllVersion: PChar; MaxLength: LongInt): LongInt; stdcall; external "csp2.dll";
eğer pchar burada değer döndürmüyorsa array of char ya da byte ile de halledebilirsin. Ama fonksiyona değer girerken SetLength ile boyutunu belirtmelisin. Aşağıdaki koda bir göz at:

Kod: Tümünü seç

type 
  TArrayOfChar: array of char;
  function csp2GetDllVersion(szDllVersion: TArrayOfChar; MaxLength: LongInt): LongInt; stdcall; external "csp2.dll";

....
var
a: TArrayOfChar;
begin
  SetLength(a, 20);
  csp2GetDllVersion(a, 20);
  ShowMessage(string(a));
end;
İki şekilde de çalışması lazım. Eğer [8] gibi bir şey ise type kısmında "TArray8 = array [0..8] of Char" gibi yazmalısın.

char* olanları direk olarak PChar yapabilirsin. iki pointer olursa yani char** gibi, oraya ek olarak var kelimesini de eklemelisin.

Bu şekilde çalışması lazım.
ikut

Teşekkürler hocam..

Mesaj gönderen ikut »

Senin önerilerini inceledim. Sonra VB ile olan örneği adam edip geçici olarak sorunu harici exe ile çözdüm. Böylece zaman teleşından çıkıp sakin kafa ile VB kodunu inceleyip çevrimlerei not aldım. ve sorun çözüldü.

şakır şakır çalışıyor delphi kodu ile...

Çok teşekkür ederim.
Cevapla