none
用C#調用DLL(C)的函數 RRS feed

  • 問題

  • Check_socket(char *IP, int port1, int port2, unsigned char *crt, int len, char *ID, int *code, int *ValResult);

     

    請問我如何用 C# 來調用到這個DLL的Check_socket函數,裡面的參數要如何轉換才行,感謝各位大大的幫忙

     

    看了一天的MSDN,還真的不知如何下手寫

    2007年8月21日 上午 10:28

解答

所有回覆

  • HI,

     

    如果最後兩個參數是CALL BY ADDRESS, 應該可以這樣寫, 不過您要試試看:

     

    Check_socket(string IP, int port1, int port2, string crt, int len, string ID, ref int code, ref int ValResult);

     

    tihs

     

    2007年8月22日 上午 02:18
  • 感恩,已試出來了,又有一個問題想要問您

     

    "031FA00302010202110081E90A0" 字串, 要轉為 binary , C# 是要如何做, 用 Convert嗎

    2007年8月22日 上午 05:30
  • HI,

     

    如果是要轉成byte陣列, 可以這樣做:

     

    byte陣列=Encoding.Default.GetBytes(字串);

     

    tihs

    2007年8月23日 上午 02:48
  •  tihs 寫信:

    HI,

     

    如果是要轉成byte陣列, 可以這樣做:

     

    byte陣列=Encoding.Default.GetBytes(字串);

     

    tihs

     

    HEX-ascii "031FA00302010202110081E90A0"

     

    我使用Encoding.Unicode.GetBytes的方式轉出來, bytes的長度多一倍, 是不是應該要少一半才是啊!

    2007年8月24日 上午 07:50
  • HI,

     

    因為您將字串以UNICODE的方式解釋, 所以體積會多一倍

     

    tihs

     

    2007年8月25日 上午 05:08
  •  

    不知要如何做才能轉回原來的 binary code, 傳到那個DLL進去, 都是長度過長

    感謝您

    2007年8月26日 下午 04:05
  •  tihs 寫信:

    HI,

     

    因為您將字串以UNICODE的方式解釋, 所以體積會多一倍

     

    tihs

     

     

    不知要如何做才能轉回原來的 binary code, 傳到那個DLL進去, 都是長度過長

    感謝您

    2007年8月26日 下午 04:06
  • HI,

     

    請問您有試過以下的做法嗎?

     

    Encoding.Default.GetBytes或Encoding.ASCII.GetBytes

     

    tihs

    2007年8月27日 上午 01:07
  •  tihs 寫信:

    HI,

     

    請問您有試過以下的做法嗎?

     

    Encoding.Default.GetBytes或Encoding.ASCII.GetBytes

     

    tihs

     

    這二個都有試過

     

    因為轉成 HEX-ascii 格式時, 每個bytebinary資料將轉成 2 bytes

    HEX-ascii 格式顯示是=031FA00302010202110081E90A (長度是 26 bytes)

    現在要轉回去binarycode時, 應該變成 13 bytes 的binary格式, 所以放到 byte [] 裡應該只有 13 bytes 的 binary 格式才是內容

     

    不知是不是用錯方式來做了

    2007年8月27日 上午 03:30
  • HI,

     

    您現在是要將UNICODE字串轉成ASCII, 再傳給Check_socket函數嗎? 還是要將UNICODE字串轉成BINARY?

     

    tihs

     

    2007年8月28日 上午 02:44
  •  tihs 寫信:

    HI,

     

    您現在是要將UNICODE字串轉成ASCII, 再傳給Check_socket函數嗎? 還是要將UNICODE字串轉成BINARY?

     

    tihs

     

     

    轉為 binary ,再傳給 Check_socket 函數

    2007年8月28日 上午 02:55
  • HI,

     

    轉成BYTE陣列就是BINARY表示法, 如果長度會變, 是因為.NET是使用UNICODE, 也許可以考慮在被呼叫的C函數中執行將Unicode轉成ASCII的動作

     

    tihs

    2007年8月29日 上午 02:11
  •  目前我沒有辦法動到C函數內的程式,也沒有source code, c# 有可以做到 unicode 轉 ascii 的方法嗎,或者寫法

    2007年8月29日 上午 08:08
  •  

    解出來了, 真的要感謝大家, 終於完成了

     

    真的要感謝大家的幫忙, 一直出問題來問大家, 感謝各位

     

    也要謝謝 Eric 的幫忙, 才讓我將這個C# 到 C 的編碼搞定, 轉到暈頭轉向10多天

     

    謝謝大家

     

     

    2007年8月29日 上午 09:28
  • HI,

     

    這樣還是要在C#中轉了, 請問您的HEX-ACSII內容的原始格式是什麼? 為什麼會變成26個byte的原因是每一個字元都會變成一個BYTE, 所以如果HEX-ASCII的原始格式是03 1F, 那就比較容易辦, 只要將03轉換成一個BYTE就可以了

     

    tihs

    2007年8月30日 上午 02:47