• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            穩(wěn)定盈利的期貨交易方法-量化趨勢(shì)交易

            alantop -專(zhuān)業(yè)量化投資者

            愛(ài)好:量化投資,逆向工程,滲透
            隨筆 - 595, 文章 - 0, 評(píng)論 - 921, 引用 - 0
            數(shù)據(jù)加載中……

            托管函數(shù)和非托管函數(shù)如何互相傳遞ansi字符串?

            先來(lái)介紹兩個(gè)預(yù)處理指令:

            #pragma unmanaged

            #pragma managed

            這兩個(gè)預(yù)處理指令,控制函數(shù)編譯成托管函數(shù),還是非托管函數(shù)。是函數(shù)級(jí)別的預(yù)控制指令。

            1. 托管函數(shù)傳送字符串給非托管函數(shù)

            分三步走

            a.先調(diào)用StringToHGlobalAnsi將string轉(zhuǎn)換成IntPtr類(lèi)型變量,(IntPtr是Net framework用于表示指針或句柄的平臺(tái)特定類(lèi)型。) 這個(gè)轉(zhuǎn)換過(guò)程就是將托管 String 中的內(nèi)容復(fù)制到非托管內(nèi)存,并在復(fù)制時(shí)轉(zhuǎn)換為 ANSI 格式。此處,并不是將托管內(nèi)存?zhèn)鬟f出來(lái),而是,在非托管堆中分配內(nèi)存并返回地址。所以,這塊內(nèi)存需要自己釋放。

            b.通過(guò)ToPointer方法將IntPtr實(shí)例的值轉(zhuǎn)換為指向未指定的類(lèi)型的指針(void *)。

            c.使用完后調(diào)用FreeHGlobal 釋放a步中的非托管內(nèi)存。

            看一個(gè)完整的例子:

            // MarshalANSI1.cpp
            // compile with: /clr
            #include <iostream>
            #include 
            <stdio.h>

            using namespace std;
            using namespace System;
            using namespace System::Runtime::InteropServices;

            #pragma unmanaged

            void NativeTakesAString(const char* p) {
               printf_s(
            "(native) received '%s'\n", p);
            }

            #pragma managed

            int main() {
               String
            ^ s = gcnew String("sample string");
               IntPtr ip 
            = Marshal::StringToHGlobalAnsi(s);
               
            const char* str = static_cast<const char*>(ip.ToPointer());

               Console::WriteLine(
            "(managed) passing string");
               NativeTakesAString( str );

               Marshal::FreeHGlobal( ip );
            }

            2. 非托管函數(shù)傳遞字符串給托管函數(shù)

            這個(gè)簡(jiǎn)單的多了。只需要調(diào)用Marshal::PtrToStringAnsi把傳統(tǒng)的c字符串轉(zhuǎn)換成托管字符串即可。

            例子:

            // MarshalANSI2.cpp
            // compile with: /clr
            #include <iostream>
            #include 
            <vcclr.h>

            using namespace std;

            using namespace System;
            using namespace System::Runtime::InteropServices;

            #pragma managed

            void ManagedStringFunc(char* s) {
               String
            ^ ms = Marshal::PtrToStringAnsi(static_cast<IntPtr>(s));
               Console::WriteLine(
            "(managed): received '{0}'", ms);
            }

            #pragma unmanaged

            void NativeProvidesAString() {
               cout 
            << "(native) calling managed func\n";
               ManagedStringFunc(
            "test string");
            }

            #pragma managed

            int main() {
               NativeProvidesAString();
            }

            posted on 2007-08-03 14:44 AlanTop 閱讀(994) 評(píng)論(1)  編輯 收藏 引用

            評(píng)論

            # re: 托管函數(shù)和非托管函數(shù)如何互相傳遞ansi字符串?[未登錄](méi)  回復(fù)  更多評(píng)論   

            哈咿唔!
            學(xué)習(xí)
            2007-08-03 15:58 | 111

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久99国产综合精品免费| 久久99热这里只有精品国产| 久久婷婷五月综合成人D啪| 国产香蕉久久精品综合网| 久久亚洲日韩看片无码| 精品久久久无码人妻中文字幕豆芽| av国内精品久久久久影院| 久久人搡人人玩人妻精品首页| 少妇久久久久久被弄到高潮| 国产成人精品综合久久久久| 99热热久久这里只有精品68| 久久亚洲精品无码VA大香大香| 88久久精品无码一区二区毛片 | 国产精品99久久99久久久| 久久不射电影网| 精品久久人人爽天天玩人人妻| 国产精品免费看久久久| 伊人热热久久原色播放www| 久久精品草草草| 欧洲精品久久久av无码电影| 欧美性猛交xxxx免费看久久久| 九九99精品久久久久久| 久久无码国产专区精品| 国产成人精品久久| 久久er国产精品免费观看2| 亚洲精品国产字幕久久不卡| 亚洲综合久久夜AV | 成人午夜精品久久久久久久小说| 亚洲αv久久久噜噜噜噜噜| 午夜人妻久久久久久久久| 久久99精品国产麻豆宅宅| 精产国品久久一二三产区区别| 久久天天躁狠狠躁夜夜2020| 国产精品青草久久久久婷婷| 久久久91人妻无码精品蜜桃HD| 国产成人精品久久免费动漫| 久久99精品久久久久久久久久| 影音先锋女人AV鲁色资源网久久| 欧美精品一区二区久久| 久久久久亚洲AV成人网| 久久久久国产精品嫩草影院|