自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#調(diào)用VC dll輸出參數(shù)

開(kāi)發(fā) 后端
本文解決了c#的調(diào)用VC dll輸出參數(shù)的問(wèn)題。

最近做項(xiàng)目需要把以前Vc寫(xiě)的程序整合到VS2005來(lái),用c#寫(xiě)的,以前VC的動(dòng)態(tài)連接庫(kù)寫(xiě)好了,重寫(xiě)比較麻煩,讓C#調(diào)用VC dll就好了。但碰到了一個(gè)問(wèn)題:VC中作為輸出參數(shù)的char*類(lèi)型的變量應(yīng)該怎樣申明才能正確輸出數(shù)據(jù)呢?

一般說(shuō)來(lái),在VC中一般的輸出參數(shù)都為指針或數(shù)組的形式,如果是一般類(lèi)型的指針如整形等,在c#中用ref加上數(shù)據(jù)變量則可獲得返回值。所以我試著把VC中char*輸出變量在c#中寫(xiě)成ref string(因?yàn)閏har*在c#中可以寫(xiě)成string或char[]),但發(fā)現(xiàn)這樣寫(xiě)是不行的。

后來(lái)從網(wǎng)上查了些資料,發(fā)現(xiàn)char*類(lèi)型數(shù)據(jù)作為輸出參數(shù)時(shí),在c#中數(shù)據(jù)類(lèi)型要寫(xiě)成StringBuilder。這樣既解決了傳進(jìn)去的參數(shù)問(wèn)題,又解決了傳出參數(shù)的問(wèn)題。

以下例子是我用C#調(diào)用VC dll中的函數(shù)的聲明及使用方法:

  1. using System.Runtime.InteropServices;//使用dll動(dòng)態(tài)庫(kù)和API函數(shù)必需  
  2.  
  3.  
  4.  
  5. [DllImport("PmacNc.dll", CharSet = CharSet.Ansi)]  
  6. public static extern int GetResponse(StringBuilder com_response, System.UInt32  
  7. maxchar, System.Char[] sendChar);  
  8.  
  9. Global.UserDll.GetResponse(com_response, 100, sendchar1);  

C#調(diào)用VC dll輸出參數(shù)的注意事項(xiàng)

1.CharSet要使用Ansi,因?yàn)閂c默認(rèn)是Ansi的,而c#是Unicode,兩者不統(tǒng)一會(huì)產(chǎn)生亂碼。還有其他DIIImport的其他參數(shù)如下,除了EntryPoint,其他三個(gè)都是非必要的。

EntryPoint: 指定要調(diào)用的 DLL 入口點(diǎn)。默認(rèn)入口點(diǎn)名稱(chēng)是托管方法的名稱(chēng) 。

CharSet: 控制名稱(chēng)重整和封送 String 參數(shù)的方式 (默認(rèn)是UNICODE) 

CallingConvention指示入口點(diǎn)的函數(shù)調(diào)用約定(默認(rèn)WINAPI)

SetLastError 指示被調(diào)用方在從屬性化方法返回之前是否調(diào)用 SetLastError Win32 API 函數(shù) (C#中默認(rèn)false )

2.結(jié)構(gòu)體的引用傳遞

首先在c#中定義和c++相同的結(jié)構(gòu)體,如果是引用傳遞,在結(jié)構(gòu)體前面加上[In, Out],如:

 [DllImport(@"test.dll")]

public static extern int test([In, Out] SLineData[] lndt,ref UInt32 length);

3.如果遇到char**類(lèi)型的輸出參數(shù)也就是指針的指針,或者二維數(shù)組或其他更復(fù)雜的情況。可以參考以下網(wǎng)頁(yè):

http://www.cppblog.com/kerlw/archive/2007/06/27/27061.html?opt=admin

http://www.ixpub.net/viewthread.php?tid=810850

【編輯推薦】

  1. C#程序中的數(shù)據(jù)顯 示:自定義標(biāo)簽和XML、XSL
  2. C#自定義事件是如何生成的
  3. C# 自定義控件dll文件的生成步驟
  4. C#自定義快捷鍵的實(shí)現(xiàn)
  5. C#自定義事件的步驟介紹
責(zé)任編輯:book05 來(lái)源: csdn
相關(guān)推薦

2009-08-05 09:22:43

C#調(diào)用VC DLL

2009-08-05 16:49:42

C#中調(diào)用dll

2009-08-05 09:09:14

C#調(diào)用VC DLL接

2009-07-31 17:28:35

C#語(yǔ)言調(diào)用DLL

2009-08-03 12:57:27

C#調(diào)用DLL

2009-08-07 17:22:36

C#調(diào)用dll導(dǎo)出函數(shù)

2009-08-05 09:30:39

C#調(diào)用DLL函數(shù)

2009-09-02 17:16:01

冒泡排序

2009-08-05 09:40:02

C#調(diào)用DLL函數(shù)

2011-04-08 09:52:44

C++C#DLL

2009-08-05 17:06:39

ASP調(diào)用C# DLL

2024-03-01 20:59:11

C#DLL開(kāi)發(fā)

2009-07-31 14:54:48

dll函數(shù)C#導(dǎo)出

2011-03-31 09:13:00

Visual Stud

2009-08-05 14:45:56

VC中DLL的創(chuàng)建及調(diào)

2009-08-18 16:31:19

Visual C#編寫(xiě)

2009-08-07 17:12:07

C# DLL函數(shù)

2009-08-17 13:26:20

C#調(diào)用Windows

2009-08-10 13:05:06

C# DLLC# Delphi開(kāi)發(fā)

2009-08-17 16:18:47

C#調(diào)用CreateO
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)