1. 程式人生 > >C#呼叫DLL之TCHAR xxx[]引數的傳遞

C#呼叫DLL之TCHAR xxx[]引數的傳遞

C++的函式程式碼為:

//得到指定序號的物件名稱
//輸入引數: nEntityIndex 指定物件的序號(圍: 0 - (lmc1_GetEntityCount()-1))
//輸出引數: szEntName 物件的名稱
typedef int (*LMC1_GETENTITYNAME)(int nEntityIndex,TCHAR  szEntName[256]);

由於出現了TCHAR szEntName[256]這個引數,試用了很多方法string[],stringbuild[]都沒成功獲取到正確的資料。

最後在論壇看到一個這樣的答案獲取啟發: 

如果用這個還是亂碼的話你可以先將IntPtr轉為Byte

然後將Byte轉為String

這樣還是亂碼的話我估計是你這個資料本來就是編碼的,是不是還有一個解碼函式?

差點忘記了byte這個型別了,果然在使用byte[]之後獲得正確的資料。

c# 呼叫程式碼:

public string GetEntityName(int nEntityIndex)
{
    byte[] ObjectName = new byte[256];
    LMC1_GETENTITYNAME lmc1_GetEntityName = (LMC1_GETENTITYNAME)dld.Invoke("lmc1_GetEntityName", typeof(LMC1_GETENTITYNAME));
    lmc1_GetEntityName(nEntityIndex, ObjectName);
    //中文轉換:System.Text.Encoding.Unicode.GetString(ObjectName).Replace("\0", null)
    return System.Text.Encoding.Default.GetString(ObjectName).Replace("\0", null);
}

相關推薦

C#呼叫DLLTCHAR xxx[]引數傳遞

C++的函式程式碼為: //得到指定序號的物件名稱 //輸入引數: nEntityIndex 指定物件的序號(圍: 0 - (lmc1_GetEntityCount()-1)) //輸出引數: szEntName 物件的名稱 typedef int (*LMC1_GETEN

React Native函式作為引數傳遞給另外一個函式去呼叫

1 用法 我們一般喜歡把js裡面的函式作為引數傳遞給另外一個函式,然後再呼叫這個函式,有點像C語言裡面的函式指標         2 程式碼測試 寫了一個函式,2個引數分別是函式,然後更具資料決定呼叫哪個函式 /** *

誤人子弟篇C語言函式返回值與引數傳遞

寫在開頭以免看到結尾你,此篇部落格純屬瞎扯,看看就可以了,不要當真哦! 如果搞過彙編,寫過子程式,那麼你就不用看了,因為看到最後你會發現,在彙編中你有很多方法去返回值,傳遞引數,而在高階語言中,編譯器只是選擇了其中的一種而已,而這篇部落格也寫的毫無邏輯,簡直喪盡天良,草菅人

C# TSC列印二維碼和條形碼(轉) C#呼叫dll提示"試圖載入格式不正確的程式"解決方法

效果圖   開發、使用環境說明 安裝TSC_7.3.8_M-3.exe印表機驅動,安裝時選擇對應的ttp 244 pro 將TSCLIB.dll複製到C:\Windows\system 驅動安裝說明     選擇下一步   &nbs

【Kettle從零開始】第八彈Kettle變數引數傳遞介紹

對於ETL引數傳遞是一個很重要的環節,因為引數的傳遞會涉及到業務資料是如何抽取。下面我為大家舉例一個簡單的需求。 需求說明:需要抽取昨天的資料裝載到目標表中。   1、  引數作用域? 答:Kettle中引數大致可分為兩類

iOS安全攻防(十三)arm彙編函式(int引數)傳遞

之前講到函式呼叫的引數傳遞通過r0-r3來實現,這篇帖子我們來驗證下。先看一個4個引數的函式程式碼: main方法簡單呼叫compute方法,先看main的彙編程式碼: 明顯可以看出,引數值1,2,3,4分別傳遞給r0-r3,然後通過b呼叫函式 compute,接著看下compute的彙編程式

C++11多執行緒thread引數傳遞問題

目錄 寫在前面 thread類的建構函式 join函式 detach函式 thread中引數傳遞 類物件作為引數 類中函式作為引數 參考書籍 寫在前面 多執行緒在很多地方都是必須要掌握的方法,這裡先說一下,thread物件的引數傳遞問題 thread類

C#呼叫DLL庫的方法

net平臺上,呼叫dll檔案有2種含義1、呼叫託管dll,即你使用。net平臺開發的dll,屬於託管程式碼2、呼叫非託管dll,即傳統的dll,一般是C++,VB,DELPHI等等開發出來的,屬於非託管程式碼。從你的意思中看出來你現在是呼叫託管的dll,方法是 “在

C# 呼叫dll 封送結構體 結構體陣列

一. 結構體的傳遞 cpp 程式碼 #define JNAAPI extern "C" __declspec(dllexport) // C方式匯出函式 typedef struct { int osVersion; int majorVe

C++呼叫DLL介面

基礎概念: SDK API DLL SDK sdk 軟體開發工具包,軟體開發工具包廣義上指輔助開發某一類軟體的相關文件、範例和工具的集合。一般而言SDK即開發Windows平臺下的應用程式所使用的SDK。它可以簡單的為某個程式設計語言提供

使用java程式碼呼叫exe程式 (包括引數傳遞

使用Java程式碼呼叫exe 1使用場景       我現在使用eclipse+tomcat的架構建立了web server, 在這個web project中我需要建立一個定時任務,在定時任務中執行本地的一個C#工程生成的exe。 2Java程式碼 public clas

Android Studio開發基礎Activity之間引數傳遞

一、簡單數值傳遞 1、MainActivity protected void onCreate(Bundle savedInstanceState) { super.onCreate

C#呼叫DLL的幾種方法,包括C#呼叫C\C++\C#DLL

C# 語言有很多優點,越來越多的人開始使用它來程式設計。但是,C#還有一些不足,如對不少的底層操作是無能為力的,只能通過呼叫Win32 DLL 或C++等編寫的DLL;另外,一般認為C#程式的保密性不夠強,因為它容易被Reflector 反編譯而得到部分原始碼,所以需要使用混合程式設計加強C#程式的保密性,而

JqueryBind方法--引數傳遞與接收的三種方法

//方法一、event.data function GetCode(event) { alert(event.data.foo); } $(document).ready(function() { $("#summary").bind("clic

VS2008 C++呼叫DLL 動態呼叫

為了共享程式碼,需要生成標準的dll,本文將介紹在vs2008 C++生成及呼叫dll。 一、生成DLL     生成一個名為FunDll的dll檔案,對外函式為addl。    step1:vs2008 環境下,檔案-->新建專案,選擇visual c++,

Unity與c++ 結構體中帶陣列引數傳遞

在unity與c++ 進行互動中往往會有結構體的資料傳遞,如果在結構體中定義了陣列,那麼在unity中需要怎樣去定義結構體從而對應c++中定義的帶有陣列的結構體呢. 請看程式碼: #ifndef TRACK_H_H_ #define TRACK_H_H_ #define

JAVA本地方法呼叫(2)陣列引數傳遞

JAVA可以把陣列作為引數傳遞給本地方法,在本地方法中可以訪問陣列中的元素。 不過,在本地方法卻不能直接訪問傳進來的陣列,需要進行一定的轉換。舉例說明: 1、建立 JAVA 類: package test; public class Test { publi

winform(C#)呼叫dll

引用名稱空間using System.Runtime.InteropServices;   [DllImport("test.dll", EntryPoint = "TestFunction1")]  應用dll ,定義入口。  public static extern in

c++11多執行緒程式設計引數傳遞若干問題

 隨著計算機處理器多核的出現,程式設計師編寫多執行緒的需求越來越大。當處理互相獨立的任務時,我們可以更好的使用多核的多執行緒的效率,可以很大的提高執行速度,但是有時候提高的速度並不是成倍的提高,因為有

C#呼叫dll提示"試圖載入格式不正確的程式"解決方法

程式在32位作業系統上執行正常,在64位作業系統上執行讀卡功能提示”試圖載入格式不正確“。 -------------------------------------------------------------------------------------------- 點選專案屬性,把目標平臺An