青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 17,  comments - 2,  trackbacks - 0


一 混合類

所謂混合類是指CLI/C++中native的Class中可以包含CLR對象,CLR的class也可以包含Naitve的對象。

1)native的class中包含CLR對象,必須通過gcroot<>或auto_gcroot<>。
2)CLR中的class中包含native的對象,必須是指針,也可以使用高手寫的CAutoNativePtr智能指針。


注意:C#中不能調(diào)用CLI/C++中的Native的class。同樣Native C++中也不能調(diào)用CLI/C++中的Ref的class。

二 實例

 高手的CAutoNativePtr類:

/***
    CAutoNativePtr - A smart pointer for using native objects in managed code.

    Author    :    Nishant Sivakumar
    Email    :    voidnish@gmail.com    
    Blog    :    
http://blog.voidnish.com
    Web        :    
http://www.voidnish.com     

    You may freely use this class as long as you include
    this copyright. 
    
    You may freely modify and use this class as long
    as you include this copyright in your modified version. 

    This code is provided "as is" without express or implied warranty. 
    
    Copyright ?Nishant Sivakumar, 2006.
    All Rights Reserved.
**
*/


#pragma once

template
<typename T> ref class CAutoNativePtr
{
private:
    T
* _ptr;

public:
    CAutoNativePtr() : _ptr(nullptr)
    
{
    }


    CAutoNativePtr(T
* t) : _ptr(t)
    
{
    }


    CAutoNativePtr(CAutoNativePtr
<T>% an) : _ptr(an.Detach())
    
{
    }


    template
<typename TDERIVED> 
        CAutoNativePtr(CAutoNativePtr
<TDERIVED>% an) : _ptr(an.Detach())
    
{
    }


    
!CAutoNativePtr()
    
{    
        delete _ptr;
    }


    
~CAutoNativePtr()
    
{
        
this->!CAutoNativePtr();
    }


    CAutoNativePtr
<T>% operator=(T* t)
    
{
        Attach(t);
        
return *this;
    }


    CAutoNativePtr
<T>% operator=(CAutoNativePtr<T>% an)
    
{
        
if(this != %an)
            Attach(an.Detach());
        
return *this;
    }


    template
<typename TDERIVED> 
        CAutoNativePtr
<T>% operator=(CAutoNativePtr<TDERIVED>% an)
    
{
        Attach(an.Detach());
        
return *this;
    }


    
static T* operator->(CAutoNativePtr<T>% an)
    
{
        
return an._ptr;
    }


    
static operator T*(CAutoNativePtr<T>% an)
    
{
        
return an._ptr;
    }


    T
* Detach()
    
{
        T
* t = _ptr;
        _ptr 
= nullptr;
        
return t;
    }


    
void Attach(T* t)
    
{
        
if(t)
        
{    
            
if(_ptr != t)
            
{
                delete _ptr;
                _ptr 
= t;
            }

        }

        
else
        
{
#ifdef _DEBUG
            
throw gcnew Exception(
                
"Attempting to Attach() a nullptr!");
#endif
        }
        
    }


    
void Destroy()
    
{
        delete _ptr;
        _ptr 
= nullptr;
    }

}
;

測試實例之CLI/C++文件:
// MixedNativeAndCLIDLL.h

#pragma once
#include 
<string>
#include 
<iostream>
#include 
<gcroot.h>
#include 
<msclr/auto_gcroot.h>

#include 
"AutoNative.h"

using namespace System;

namespace MixedNativeAndCLIDLL {

    
public class NativeClass
    
{
    
public:
        
int *pX;    
        NativeClass()
{pX = new int(10);}
        
~NativeClass()
        
{
            
if(pX != NULL)
            
{
                delete pX;
                pX 
= NULL;
            }

        }
        
    }
;

    
public ref class RefClass
    
{
    
public:
        
int x;    
        RefClass()
{x = 20;}
    }
;

    
public class MixedClass0
    
{
        
public:
            NativeClass nativeClass;
            
//RefClass refClass; // error c3265 and error c3149
            gcroot<RefClass^> refClass1;

            std::
string nativeStr;
            
//System::String refStr; // error c3265 and error c3149
            gcroot<System::String^> refStr1;

            MixedClass0()
            
{
                refClass1 
= gcnew RefClass();
                refStr1 
= gcnew System::String("i am a native class mixed some clr members.\n");
            }

            
~MixedClass0()
            
{            
                delete refClass1;
                delete refStr1;
            }


            
void PrintSelf()
            
{
                System::Console::WriteLine(
"my name is MixedClass0");
                System::Console::WriteLine(refClass1
->x);
                System::Console::WriteLine(refStr1);
            }

    }
;

    
public class MixedClass1
    
{
        
public:
            NativeClass nativeClass;
            
//RefClass refClass; // error c3265 and error c3149
            msclr::auto_gcroot<RefClass^> refClass1;

            std::
string nativeStr;
            
//System::String refStr; // error c3265 and error c3149
            msclr::auto_gcroot<System::String^> refStr1;

            MixedClass1()
            
{
                refClass1 
= gcnew RefClass();
                refStr1 
= gcnew System::String("i am a native class with some clr members.\n");
            }

            
~MixedClass1()
            
{
                
// no need to delete.
            }
        

            
void PrintSelf()
            
{
                System::Console::WriteLine(
"my name is MixedClass1");
                System::Console::WriteLine(refClass1
->x);
                System::Console::WriteLine(refStr1);
            }

    }
;

    
public ref class MixedClass2
    
{
        
public:
            
//NativeClass nativeClass; // error c4368
            NativeClass * nativeClass1;
            RefClass
^ refClass; 
            
            
//std::string nativeStr; // error c4368
            std::string *nativeStr1;
            System::String
^ refStr; //     

            MixedClass2()
            
{
                nativeClass1 
= new NativeClass();
                nativeStr1 
= new std::string("i am a clr class with some native members.\n");
            }

            
~MixedClass2()
            
{
                delete nativeClass1;
                delete nativeStr1;
            }

            
!MixedClass2(){}

            
void PrintSelf()
            
{
                System::Console::WriteLine(
"my name is MixedClass2");
                std::cout
<<*(nativeClass1->pX)<<std::endl;
                std::cout
<<*nativeStr1<<std::endl;                
            }

    }
;
    
    
public ref class MixedClass3
    
{
        
public:
            
//NativeClass nativeClass; // error c4368
            CAutoNativePtr<NativeClass> nativeClass1;
            RefClass
^ refClass; 
            
            
//std::string nativeStr; // error c4368
            CAutoNativePtr<std::string> nativeStr1;
            System::String
^ refStr; //     

            MixedClass3()
            
{
                nativeClass1 
= new NativeClass();
                nativeStr1 
= new std::string("i am a clr class with some native members.\n");
            }

            
~MixedClass3(){}
            
!MixedClass3(){}

            
void PrintSelf()
            
{
                System::Console::WriteLine(
"my name is MixedClass3");
                std::cout
<<*(nativeClass1->pX)<<std::endl;
                std::cout
<<*nativeStr1<<std::endl;                
            }

    }
;
}


測試實例之C#調(diào)用文件:
using System;
using System.Collections.Generic;
using System.Text;

namespace CsharpTest
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            MixedNativeAndCLIDLL.MixedClass0 mixedClass0 
= new MixedNativeAndCLIDLL.MixedClass0();
            
//mixedClass0.PrintSelf();
            MixedNativeAndCLIDLL.MixedClass1 mixedClass1 = new MixedNativeAndCLIDLL.MixedClass1();
            
//mixedClass1.PrintSelf();
            MixedNativeAndCLIDLL.MixedClass2 mixedClass2 = new MixedNativeAndCLIDLL.MixedClass2();
            mixedClass2.PrintSelf();
            MixedNativeAndCLIDLL.MixedClass3 mixedClass3 
= new MixedNativeAndCLIDLL.MixedClass3();
            mixedClass3.PrintSelf();
        }

    }

}


三 代碼下載

http://m.shnenglu.com/Files/mzty/MixedNativeAndCLITest.rar
posted on 2008-11-08 13:26 BeyondCN 閱讀(885) 評論(0)  編輯 收藏 引用 所屬分類: .NET
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲另类自拍| 欧美国产先锋| 亚洲国产小视频| 亚洲一区二区三区视频播放| 亚洲另类在线视频| 亚洲一区二区三区乱码aⅴ| 9久草视频在线视频精品| 亚洲图片欧美一区| 性欧美超级视频| 久久久噜噜噜久久中文字幕色伊伊 | 欧美一区二区高清| 亚洲六月丁香色婷婷综合久久| 一本色道久久88精品综合| 夜色激情一区二区| 午夜在线精品| 男人的天堂成人在线| 亚洲国产专区| 亚洲综合清纯丝袜自拍| 久久精品视频在线看| 欧美成人一区二区| 国产精品久久久久久久久动漫| 国产一区二区剧情av在线| 91久久国产精品91久久性色| 亚洲专区欧美专区| 欧美大片在线看| 亚洲欧美一区二区激情| 欧美mv日韩mv国产网站app| 国产免费一区二区三区香蕉精| 在线观看欧美日本| 亚洲欧美精品伊人久久| 欧美大片第1页| 午夜久久tv| 欧美视频一区二区| 最新国产精品拍自在线播放| 欧美在线视频a| 野花国产精品入口| 欧美sm重口味系列视频在线观看| 国产欧美日韩综合精品二区| 99国产精品自拍| 欧美激情aⅴ一区二区三区| 亚洲欧美日本精品| 欧美日韩精品高清| 亚洲欧洲一区二区在线播放 | 午夜精品免费| 日韩午夜电影av| 乱人伦精品视频在线观看| 国产女优一区| 西瓜成人精品人成网站| 99国产精品久久久久久久久久 | 欧美专区第一页| 国产精品美女久久久久av超清 | 日韩视频在线你懂得| 久久婷婷国产麻豆91天堂| 国产亚洲综合性久久久影院| 欧美一区二区三区视频免费播放| 亚洲精品无人区| 欧美精品久久久久久久久久| 亚洲国产精品传媒在线观看| 久久综合免费视频影院| 欧美在线免费观看视频| 国产亚洲精品自拍| 久久精品视频网| 性欧美1819性猛交| 国产精品久久久久9999| 一区二区三区成人精品| 亚洲精品色图| 欧美第一黄色网| 亚洲精品一区二区三| 亚洲精品1区| 欧美精品在线观看91| 亚洲精品欧美日韩专区| 亚洲精品久久嫩草网站秘色| 欧美区在线观看| 亚洲欧美乱综合| 久久www成人_看片免费不卡 | 亚洲激情视频网站| 亚洲黑丝在线| 国产精品ⅴa在线观看h| 欧美在线一二三区| 久久一区二区视频| 99视频在线精品国自产拍免费观看| 亚洲免费观看高清在线观看| 国产精品免费福利| 久久综合一区二区| 欧美日韩高清在线播放| 久久精品99无色码中文字幕 | 免费在线欧美黄色| 亚洲一区二区免费看| 欧美在线影院| 洋洋av久久久久久久一区| 亚洲欧美久久| 亚洲黄页视频免费观看| 一区二区高清| 亚洲观看高清完整版在线观看| 亚洲精品美女免费| 国产亚洲福利| 亚洲精品一区二区三区99| 国产亚洲网站| 99精品福利视频| 在线观看中文字幕不卡| 国产精品99久久久久久久vr | 老司机午夜精品视频| 欧美日韩精选| 免费久久99精品国产自| 国产精品视频男人的天堂| 欧美激情视频一区二区三区免费| 国产精品裸体一区二区三区| 欧美激情精品久久久久久| 国产精品视频精品视频| 亚洲老司机av| 最新国产乱人伦偷精品免费网站| 欧美一级大片在线观看| 亚洲一区二区三区在线看| 欧美成人资源网| 嫩草国产精品入口| 国语自产精品视频在线看8查询8| 在线午夜精品自拍| 99v久久综合狠狠综合久久| 久久免费视频在线| 久久久久久久久一区二区| 国产精品www| 亚洲裸体视频| 免费精品视频| 老鸭窝91久久精品色噜噜导演| 欧美日韩色一区| 91久久精品视频| 亚洲国产一区二区三区a毛片| 久久国产精品亚洲77777| 欧美在线免费视频| 国产精品一二三视频| 亚洲一区中文字幕在线观看| 亚洲午夜一区二区三区| 欧美日韩在线精品一区二区三区| 亚洲国产精品美女| 亚洲另类春色国产| 欧美日韩影院| 99视频一区二区三区| 亚洲视频999| 国产精品久久久久久超碰| 亚洲性感激情| 欧美一区二区免费视频| 国产视频欧美视频| 欧美亚洲综合网| 免费欧美网站| 亚洲精品一区二区三区婷婷月| 欧美成人在线网站| 日韩一二在线观看| 午夜精品福利一区二区蜜股av| 国产精品视频第一区| 欧美在线视频日韩| 欧美成人精品一区二区| 99在线视频精品| 欧美性理论片在线观看片免费| 亚洲私拍自拍| 久久久久久久999精品视频| 亚洲第一网站| 欧美日韩日本网| 香蕉久久国产| 欧美激情在线| 性欧美xxxx视频在线观看| 揄拍成人国产精品视频| 欧美精品色综合| 香蕉亚洲视频| 亚洲黄色大片| 欧美在线观看日本一区| 红桃视频欧美| 欧美日韩一区二区在线观看视频 | 欧美国产另类| 中文在线一区| 欧美国产先锋| 羞羞答答国产精品www一本| 狠狠88综合久久久久综合网| 欧美成人福利视频| 在线视频你懂得一区| 久久综合五月| 亚洲女同精品视频| 欧美一区二区三区另类| 亚洲国产mv| 国产精品日韩久久久久| 老鸭窝91久久精品色噜噜导演| 亚洲精品一区二区在线观看| 久久都是精品| 夜夜嗨av一区二区三区免费区 | 99riav国产精品| 国产字幕视频一区二区| 欧美久久影院| 久久美女性网| 亚洲一区综合| 日韩网站在线观看| 欧美高清视频一区二区| 久久成人人人人精品欧| 欧美电影免费观看网站| 亚洲欧美一区二区在线观看| 亚洲精品国产无天堂网2021| 久久露脸国产精品| 亚洲欧美国产不卡| 一区二区三区|亚洲午夜| 亚洲第一天堂av| 激情成人综合| 国产欧美日韩在线视频|