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

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#中不能調用CLI/C++中的Native的class。同樣Native C++中也不能調用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#調用文件:
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://www.shnenglu.com/Files/mzty/MixedNativeAndCLITest.rar
posted on 2008-11-08 13:26 BeyondCN 閱讀(890) 評論(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ⅴ人在线观看| 在线高清一区| 亚洲综合色网站| 一区二区三区精品视频在线观看| 久久精品国产精品亚洲精品| 香蕉久久国产| 欧美精品久久久久久久免费观看| 麻豆freexxxx性91精品| 国产色综合天天综合网| 在线亚洲一区观看| 亚洲视频电影在线| 欧美人妖在线观看| 亚洲激情视频| 亚洲国产精品久久久久秋霞不卡 | 亚洲综合导航| 欧美凹凸一区二区三区视频| 免费观看成人网| 亚洲电影中文字幕| 久久av资源网站| 久久久夜色精品亚洲| 国产色综合天天综合网| 午夜精品国产精品大乳美女| 欧美影院视频| 国产喷白浆一区二区三区| 亚洲欧美日本国产有色| 午夜天堂精品久久久久| 国产精品久久久久永久免费观看| 99精品国产99久久久久久福利| 99国产精品久久| 欧美日韩免费| 一区二区三区视频在线| 性色av一区二区三区| 国产精品日本| 香蕉久久a毛片| 久久精品一区二区国产| 黄色日韩在线| 免费成人黄色| 亚洲三级免费观看| 中文亚洲免费| 国产精品网站在线| 欧美一区激情| 欧美国产日本| 在线综合亚洲| 国产乱码精品一区二区三| 亚洲欧美精品| 麻豆精品在线播放| 亚洲免费播放| 国产精品视频一二三| 欧美一区二区三区在线| 欧美成人免费小视频| 日韩视频一区二区在线观看| 欧美日韩亚洲另类| 午夜精品久久久久久久白皮肤| 久久免费高清视频| 日韩视频一区二区三区| 国产精品伦一区| 久久久久久一区二区| 亚洲精品日韩一| 久久se精品一区精品二区| 亚洲另类一区二区| 欧美日韩系列| 亚洲一区二区三区久久| 久久精品人人爽| 91久久精品国产| 欧美视频网站| 久久婷婷国产综合尤物精品| 亚洲二区在线视频| 欧美一区二区在线| 91久久香蕉国产日韩欧美9色| 欧美视频在线观看 亚洲欧| 久久9热精品视频| 亚洲精品在线三区| 老牛嫩草一区二区三区日本 | 欧美高清视频一区二区| 在线一区观看| 欧美激情1区2区| 久久都是精品| 亚洲神马久久| 亚洲国产精品国自产拍av秋霞| 国产精品久久久一区麻豆最新章节 | 亚洲国产欧美日韩精品| 国产精品a久久久久久| 美日韩在线观看| 亚洲男人的天堂在线观看| 亚洲国产精品电影| 久久综合九色综合久99| 欧美一区二区视频网站| 亚洲视频在线看| 亚洲国产成人精品视频| 韩国美女久久| 国产午夜精品理论片a级大结局 | 性伦欧美刺激片在线观看| 亚洲精品久久久久久久久久久久久| 国产亚洲欧美日韩美女| 国产精品久久久久永久免费观看 | 99综合视频| 亚洲国产中文字幕在线观看| 麻豆国产va免费精品高清在线| 久久国产精品一区二区| 香蕉久久国产| 欧美一级片久久久久久久| 午夜精品久久久久久久99热浪潮| 一区二区av| 亚洲精选在线观看| 亚洲片在线观看| 亚洲精品日韩精品| 亚洲精选91| 一区二区高清| 亚洲天堂网在线观看| 一区二区三区毛片| 亚洲一区在线直播| 亚洲欧美日韩久久精品| 午夜日韩av| 久久精品视频在线看| 久久九九有精品国产23| 久久资源在线| 欧美成人免费在线| 亚洲国产色一区| 亚洲精选国产| 一区二区欧美国产| 亚洲欧美一区二区三区久久| 亚洲男人的天堂在线| 久久成人一区| 免费成人av在线看| 欧美日韩蜜桃| 国产日韩亚洲欧美精品| 一区二区在线免费观看| 亚洲欧洲在线一区| 在线亚洲国产精品网站| 午夜精品理论片| 狂野欧美一区| 亚洲国产欧美一区二区三区久久 | 亚洲三级免费| 亚洲一二三区在线观看| 欧美中文字幕精品| 欧美aⅴ一区二区三区视频| 欧美精品在线播放| 国产精品视频专区| 在线观看一区二区视频| 99在线热播精品免费99热| 午夜国产精品视频免费体验区| 久久免费黄色| 亚洲区中文字幕| 亚洲欧美日韩系列| 欧美不卡视频| 国产精品系列在线播放| 亚洲国产一区视频| 欧美一区二区三区四区高清| 另类专区欧美制服同性| 亚洲精品一区二区三区福利| 亚洲欧美一区二区精品久久久 | 久久精品中文字幕一区二区三区| 免费成人黄色| 国产色视频一区| av成人动漫| 老司机久久99久久精品播放免费| 亚洲精品久久久久久一区二区| 欧美亚洲在线观看| 欧美第一黄色网| 狠狠综合久久av一区二区小说| 这里只有精品在线播放| 老色鬼精品视频在线观看播放| av成人免费| 欧美gay视频激情| 国语精品中文字幕| 午夜精品99久久免费| 亚洲级视频在线观看免费1级| 欧美一区二区福利在线| 欧美视频精品在线| 亚洲日本一区二区| 蜜臀99久久精品久久久久久软件| 亚洲特级毛片| 欧美日韩福利在线观看| 91久久久久久久久久久久久| 久久久久久一区二区| 亚洲网站在线| 欧美日韩一卡二卡| 亚洲免费av电影| 欧美暴力喷水在线| 久久久www成人免费精品| 国产免费观看久久| 亚洲欧美激情视频| 99re8这里有精品热视频免费| 欧美成人国产一区二区| 亚洲国产精品999| 免费试看一区| 久久激情一区| 国产自产女人91一区在线观看| 午夜精品视频一区| 亚洲性图久久| 国产精品一区二区黑丝| 欧美一区二区三区在线免费观看 | 亚洲欧美日韩一区二区三区在线观看 | 亚洲国产小视频| 欧美激情精品| 欧美韩国日本一区| 在线视频一区二区| 亚洲色在线视频|