C語言中“char * params[]”的參數在delphi中該如何定義?100分求解決放過。

來源:互聯網
上載者:User
C語言中“char * params[]”的參數在delphi中該如何定義?100分求解決放過。 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061130165801145.html
VC寫的動態庫 一個參數定義成  
  “char   *   params[]”delphi中該如何定義?才能正確的調用。  
   
  有經驗的朋友應該一看就知道。  
  因為好久沒有來泡壇了。所以放100分吧。來者有分。  
   
   
  int   DllExport   PersonalizeCard   (long   CardNumber,   int   nargs,   char   *   params[])  
  如果成功會在C:下寫ookk.txt檔案    
  感興趣的朋友可以通過下面地址下載DLL 實驗一下。  
   
  http://ys-h.ys168.com/ys168up/D1/?dll.rary72z7ld4f9f9b1f8z95b4b4b7b0b1b1fq9b4b2b7fl9fl6e14z97e14e24b1b2f2b1fl9b4fc6fd7z  
   
 

params   :   array   of   char

type  
  c=array   of   PChar;  
   
   
   
  int   DllExport   PersonalizeCard   (long   CardNumber,   int   nargs,   params   c)

謝謝大家支援!如方便請大家下載後調用一下。  
  然後把程式貼出來。  
   
  to:hongqi162(失蹤的月亮)    
  我試了一下,沒成功。  
  相信你應該能搞定。趕快出手吧。

個人認為char   *   params[]是一個字元指標數組,不應該理解為array   of   char,而應該理解為array[low..high]   of   string或TstringList類。本人初學,對概念的理解可能較膚淺,高手勿笑

二樓array   of   pchar應該是最精確的理解了

用PChar  
   
  function   PersonalizeCard   (CardNumber:   Cardinal;     nargs:   Integer;   params:   PChar):   Integer;    
   
  對應是array   of   PChar,我覺得  
   
  C裡面有種調用方式是...,意思是說可以寫入很多參數的那種,感覺params差不多。  
  LZ這樣一試:  
  var  
      Buffer:   array   [0..10,   0..1024]   of   Char;  
  begin  
      //buffer賦值  
      PersonalizeCard   (no,   10,   @Buffer);  
  end;  
   
  dll弄不下來,不弄了。

樓上的有道理,不過後面要加stdcall;   external   dllname等,否則還是錯誤的.總之,那個參數是個指標就行了,至於怎樣用,要看情況,輸出和輸入指標可有不同的處理  
 

謝謝大家的支援,根據大家的思路早上我又試了一次還是不行。  
  百思不的其解呀!  
   
  to:maozefa(阿發伯)   壓棧方式已經檢查過了stdcall。  
  三個參數都是入參。  
   
  不好意思,上面的到期了,下面是新的百分百好用。  
  http://blog.chinaunix.net/upfile/061201092335.rar

char   *   params[]等價char**   params  
  char*p   等價   pchar(delphi)  
 

謝謝大家的支援!  
  我開了一個空間把DLL   傳上去了。地址http://free.ys168.com/?goodok   的“軟體下載”目錄下的dll.rar   檔案。  
   
  希望高手出面解決這個問題

這個,還是用pointer就可以了  
   
  用的時候定義一個array   of   char   數組就可以了!

在參數前面加個var就行了

最好把array的參數定義成record來傳

類型嚴格對應的DELPHI聲明是  
      params:   PPChar;  
   
   
  定義成    
      params:   Array   of   PChar;   也可以的,  
  Array   of   PChar可以強制轉換成PPChar不出問題,  
  但反過來轉換不行的.  
   
   
  感覺樓主問題不在這兒.  
  看樓主的DLL   C聲明中,並沒有聲明__stdcall,  
  那為什麼DELPHI聲明中要用stdcall?   DELPHI聲明對應的應該是cdecl  
 

string是Pascal特有的類型,不能直接相容PChar  
   
  char   *   params[]  
  看成一個PChar的數組,就是array   of   PChar  
   
  function   PersonalizeCard   (  
                      CardNumber:   Integer;  
                      nargs:   Integer;  
                      params:   PPChar  
                      ):   Integer;   stdcall;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      vParams:   array[0..1]   of   PChar;  
  begin  
      vParams[0]   :=   'Zswang';  
      vParams[1]   :=   '到此一遊';  
      PersonalizeCard(1,   2,   @vParams[0]);  
  end;  
   
  你提供的Demo無法調試,缺少Mfc42d.dll、MSVCRTD.DLL  
  只有你自己調試了

關於array   of   char   與PPCHAR   類型轉換,可以看下面代碼驗證其可行.  
  //---------------------------------------------------------------  
   
  procedure   test(params   :   ppchar);//這兒用的PPChar類型,嚴格對應char*   params[];  
  begin  
      ShowMessage(params^);  
      inc(params);  
      ShowMessage(params^);  
  end;  
   
  type  
      ttest2   =   procedure(params:   array   of   pchar);  
   
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      s:   array   of   pchar;  
      p:   ttest2;  
  begin  
      setlength(s,2);  
      s[0]   :=   '1234151';  
      s[1]   :=   'abc';  
      p   :=   ttest2(@test);//函數轉換,四位元組指標賦值而已.  
      p(s);   //參數使用array   of   ppchar   方式調用procedure   test  
  end;  
 

char   *   params[]在一般的C++編譯器(Bcb、VC)是不能通過編譯的,因為C++中不允許定義動態數組(C++的動態數組應該通過堆記憶體配置才行),但如果這樣就不會錯:char   *   params[]={“china”,“French”,“Japan”};  
  char   *   params[]的準確含義應該是動態字元指標數組,在delphi中與array   of   PChar等價。

謝謝大家幫忙!雖然現在還沒有調通但問題應該不是參數定義的問題了。通過討論對c與delphi的類型有了更多的認識。

ding.......

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.