2016-04-12 17 views
0

Aşağıdaki wiki sayfasında belirtildiği gibi simgeleri ayıklamak için tcl shellicon komutunu kullanıyorum, bunun içinde bazı uluslararası karakter sorunları var, sonra sınamak için bazı kodlar yazarım ama yok Çalışmıyor, düzeltmek için bana yardım edebilecek biri var. Kabuk çalıştırmak cmdtcl/tk içindeki uluslararası chars açılamıyor

gcc compile: gcc testdll.c -ltclstub86 -ltkstub86 -IC:\Users\USERNAME\tcc\include -IC:\Users\USERNAME\tcl\include -LC:\Users\USERNAME\tcl\lib -LC:\Users\USERNAME\tcc\lib -DUSE_TCL_STUBS -DUSE_TK_STUBS -shared -o testdll.dll 

pencere:

/* 
* testdll.c 
* gcc compile: gcc testdll.c -ltclstub86 -ltkstub86 -IC:\Users\L\tcc\include -IC:\Users\L\tcl\include -LC:\Users\L\tcl\lib -LC:\Users\L\tcc\lib -DUSE_TCL_STUBS -DUSE_TK_STUBS -shared -o testdll.dll 
*/ 
#include <windows.h> 
#include <tcl.h> 
#include <stdlib.h> 

int TestdllCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[]) { 
    char * path; 
    Tcl_DString ds; 

    if (objc > 2) { 
     Tcl_SetResult(interp, "Usage: testdll ?path?",NULL); 
     return TCL_ERROR; 
    } 
    if (objc == 2) { 
     path = Tcl_GetString(objv[objc-1]); 
     path = Tcl_TranslateFileName(interp, path, &ds); 
     if (path != TCL_OK) { 
      return TCL_ERROR; 
     } 
    } 
    Tcl_AppendResult(interp, ds, NULL); 
    return TCL_OK; 
} 

int DLLEXPORT Testdll_Init(Tcl_Interp *interp) { 
    if (Tcl_InitStubs(interp, "8.5", 0) == NULL) { 
     return TCL_ERROR; 
    } 
    Tcl_CreateObjCommand(interp, "testdll", TestdllCmd, NULL, NULL); 
    Tcl_PkgProvide(interp, "testdll", "1.0"); 
    return TCL_OK; 
} 

I ile derleme I Aslında

// This line isn't in the output, just to show the first line of output is a *EMPTY LINE* 

    while executing 
"testdll 'C:/Users/L/桌面'" 
    invoked from within 
"puts [testdll 'C:/Users/L/桌面']" 
    (file "testdll.tcl" line 2) 

: tclsh testdll.tcl

load testdll 
puts [testdll C:/Users/L/桌面] 

çıkış içeriği "C:/Users/L/桌面 olan bir çizgi yazdırmak istiyorum "

Tcl_GetString, Tcl_TranslateFileName öğesinin Tcl_FSGetNormalizedPath, Tcl_FSGetNativePath ile nasıl değiştirileceğini ayıklamak için bu dll'yi yazdım, açık mı merak ediyorum?

Teşekkür ederiz!

+0

Hangi kod sayfasını kullanıyorsunuz? Bakınız: [unicode-karakterler-in-windows-komut satırı] (http://stackoverflow.com/questions/388490/unicode-characters-in-windows-command-line-how) –

+0

Bir uzantı yapmak istiyorum içindeki Çince karakterleri içeren yolu yazdırın, ancak yukarıdaki kod bir hata dizesinden başka bir şey yazdırmıyor, normal bir yol bile girdiğim şeyi yazdıramıyor. Ben ascii kullanıyorum. – Kaffa

+0

Lütfen hatayı eklemek için sorunuzunuzu düzenleyin. Ayrıca, 'load' komutu mutlak yollarla daha iyi çalışır. Testdll dosyasının mutlak yolunu kullanmak için değiştirmeyi deneyin. –

cevap

0

Kaldır bu:

if (path != TCL_OK) { 
     return TCL_ERROR; 
    } 

Bir char * bir int karşılaştırarak edilir.

Tcl_TranslateFileName manuel sayfanın mesajı:

However, with the advent of the newer Tcl_FSGetNormalizedPath 
and Tcl_FSGetNativePath, there is no longer any need to use this 
procedure. 

Muhtemelen daha modern API çağrısına geçmelisiniz.