1. 程式人生 > >C#呼叫C++ DLL 傳出字串,C++ DLL傳參問題

C#呼叫C++ DLL 傳出字串,C++ DLL傳參問題

C++ .h檔案

VIDEO_DLL_API int __cdecl PlatformQueryRes(char* pcSvrIpAddress, char *pcLoginUserName, char** ppcResult);

C++ .cpp檔案

int __cdecl PlatformQueryRes(char* pcSvrIpAddress, char *pcLoginUserName, char** ppcResult)
{
 if (!g_Global.m_bInitPlatformSDKFlag)
 {
  return Platform_ErrUnInit;
 }
 if (NULL == pcSvrIpAddress || NULL == pcLoginUserName || NULL == ppcResult)
 {
  return Platform_ErrInvalidParam;
 }
 string sResult;
 PlatformBase_ptr ptrPlatformBase = g_Global.GetPlatformObject(pcSvrIpAddress);
 if (ptrPlatformBase.get())
 {
  int iResult;
  iResult = ptrPlatformBase->QueryRes(pcLoginUserName, sResult); 
  if (iResult == Platform_ErrSuccess)
  {
   strcpy(*ppcResult, (char*)sResult.c_str());  
  }
  if (iResult == Platform_ErrQueryFail)
  {
   strcpy(*ppcResult, ""); 
  }
  return iResult;
 }else
 {
  return Platform_ErrQueryFail;
 }
}

C# .cs檔案

public extern static int PlatformQueryRes(byte[] pcSvrIpAddress, byte[] pcLoginUserName, ref StringBuilder ppcResult);  

ref StringBuilder與char**相對應。

C#呼叫C++ DLL 傳出字串時,C++ DLL相應介面的傳出字串引數為char**。

相關推薦

C#呼叫C++ DLL 傳出字串C++ DLL問題

C++ .h檔案 VIDEO_DLL_API int __cdecl PlatformQueryRes(char* pcSvrIpAddress, char *pcLoginUserName, cha

C#呼叫C(C++)dll示例教程包含dll找不到函式入口的解決辦法包含C#dll呼叫方式不對出錯的解決辦法

本篇文章為了熟悉在C#環境下如何呼叫C(C++)寫的dll。 【轉帖註明出處】 一、首選建立一個C的DLL工程,生產dll檔案用來備用,步驟如下: 1、VS2010建立C++專案內選擇Win32的應用程式,名稱為CreateCDll,在應用程式設定介面內選擇DLL,如下圖:

C++如何判斷一個string字串是否是數字

方法一:判斷字元的ASCII範圍(數字的範圍為48~57) #include <iostream> using namespace std; bool AllisNum(string str); int main( void ) {

c語言==字元陣列與字串char的取值範圍(1)

求char型別陣列的strlen長度 昨天老師給了一道題目 #include <stdio.h> #include "string.h" int main() { int i; char a[1000]; fo

C#呼叫帶結構體指標的C Dll的方法

在C#中呼叫C(C++)類的DLL的時候,有時候C的介面函式包含很多引數,而且有的時候這些引數有可能是個結構體,而且有可能是結構體指標,那麼在C#到底該如何安全的呼叫這樣的DLL介面函式呢?本文將詳細介紹如何呼叫各種引數的方法。 一、呼叫介面僅含普通變數 eg:int fn

JNI進階一 (C++呼叫java屬性和方法javap的使用)

一、C/C++函式分析://獲取jclass物件,引數:this的意思,就是native方法所在的類1.GetObjectClass(jobject) //獲取普通屬性id,第一個引數:類物件, 第二個引數:屬性名,第三個引數:屬性簽名(不知道的同學點選這裡)2.GetFie

C++呼叫python:無引數簡單helloworld示例

執行環境:VS2015 + python3.4 總體步驟簡單來說如下: 設定編譯環境,其實就是設定Python的標頭檔案和庫檔案目錄以及一個很讓人頭疼的python3.4_d.lib問題 初始化Python直譯器: Py_Initialize();

C#呼叫批處理(bat)檔案並獲取執行批處理(bat)檔案後返回值

/// /// 執行BAT檔案 /// /// csv檔案引數 /// bat檔案執行返回值 static string execBAT(string fileName) { ProcessStartInfo pro = new System.Diagnostics.ProcessStartInf

c++入門:輸入一個字串將其分段輸出分段符為除字母和數字之外的符號。

輸出 輸入一個字串 樣例輸入 ad/adfa,123d?a1 樣例輸出 ad adfa 123d a1#include<iostream> #include<string.h>

c/cpp中如何分割字串類似於split的功能

在python中,如果要求當前時間的unix時間戳,我特別喜歡這麼用: import time timestr = time.time() timestamp = int(timestr.split('.')[0]) 這裡的split函式,我非常喜歡,在java、c#和

C++呼叫Go方法的字串傳遞問題及解決方案

摘要:C++呼叫Go方法時,字串引數的記憶體管理需要由Go側進行深度值拷貝。 現象 在一個APP技術專案中,子程序按請求載入Go的ServiceModule,將需要拉起的ServiceModule資訊傳遞給Go的Loader,存在C++呼叫Go方法,傳遞字串的場景。 方案驗證時,發現有奇怪的將std::str

C#】WebApi 添加過濾器實現對請求數和響應內容的日誌記錄

total exc gpo start ID json clear block pub filter的介紹 filter在Web API中經常會用到,主要用於記錄日誌,安全驗證,全局錯誤處理等;Web API提供兩種過濾器的基本類型:actionfilterattri

瞭解C中scanf單整數讀取C++中cin.peek()用法

這兩天被人問到一個小題,題目是是這樣的: 輸入1個8位以上的數,將個位上的偶數取出,並按照原來從高位到低位相反的順序組成一個新數,並輸出這個新數: 輸入:27638496 輸出:64862 水題當然是水題,用char型別陣列很快就能寫出來,但是想用讀取整數的方式能不能寫出來呢?

C++:編寫跨平臺程式的關鍵C/C++中的內建巨集定義

得到的答案 都不好。為什麼,因為他們都不知道原理。其實原理很簡單,編譯器 引數或Makefile添加了巨集定義,你才可以這樣去判斷。 比如編譯器設定了巨集 is_windows,你才能去用。不設定沒法用。 但是,我敢肯定各種編譯器 內建一些巨集,比如 MS VC的cl.exe ,LIN

C#】之 值型別、引用型別及其

前言 值型別和引用型別都是相對於變數來說的,是變數儲存資料的一種形式。 值型別變數直接儲存資料將資料儲存在棧中,而引用型別的變數儲存的是資料的引用,其真正的資料儲存在資料堆中。 棧與堆: 棧是在編譯期間就分配好的記憶體空間,因此你的程式碼中必須就棧的大小有明確的定義。 堆

url json字串 後端前端 json字串

//前端傳後端json字串 var aa = JSON.stringify(data.Data); //console.log(aa); aa = encodeURIComponent(aa);//控制元件沒有好的

java 通過儲存過程名字 獲取儲存過程的引數列表然後自動呼叫sp

實現思路:關鍵點在 通過儲存過程的名字獲取引數列表 資料庫選擇sql server 2012 查詢的指令碼是(注意要指定對應的資料庫,如:使用 use test  或者 test.sys.parameters   test.dbo.sysobjects): select

java呼叫批檔案(.bat)並動態

java程式碼: package test; import java.io.IOException; public class TestMain { public static void main(String [] args) { try { Proc

bootstrap模態框(彈出框)如何新增事件

$('#identifier').modal({ keyboard:false}) Toggle: .modal('toggle')手動切換模態框。 $('#identifier').modal('toggle') Show: .modal('show')手動開啟模態框。 $('#identifier').

微信小程式生成二維碼並且進行

微信小程式生成二維碼第一步.首先我們需要去拿到Token值 第一步是一個比較常規的操作,未遇到大的問題。第二步.拿著Token進行換取二維碼    這一不是很關鍵的地方,騰訊用token換取二維碼的方法有三組介面A,B,C    我們推薦生成並使用小程式碼,它具有更好的辨識度