C# 에서 C++ DLL 불러서 쓰기 #3

Programming/C# 2018. 2. 13. 15:49 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

C# 에서 C++ DLL 불러서 쓰기 #3















3. Class 가져오기



C++ DLL 에



#ifdef BOX_EXPORTS

#define BOX_API __declspec(dllexport)

#else

#define BOX_API __declspec(dllimport)

#endif











C++


Class BOX_API Box{

public:

Box();

int setInt(int a);

void setString(char* str);

}








이런 클래스가 존재하고






C# 에서 해당 클래스를 불러서 사용하려고 한다,









C#



namespace BoxConsoleApplication

{

    class Program

    {


        unsafe static void Main(string[] args)

        {

             Box b = new Box();

             int c = b.setInt(3);

             b.setString("HelloWorld");


        }

    }

}



이렇게 사용하고 싶다.












하지만 바로 저렇게 사용 할 수는 없다.






참조하여도 해당 멤버들이 [개체브라우저]에 보이지 않는 멤버들을 직접 명시하여 참조해 주어야한다.











C++ 클래스가 보이지 않으므로


C++ 클래스를 활용 할 수 있는 전역 함수들을 만들어서


명시하여 C# 에서 사용한다.



C++


Class BOX_API CBox{

public:

CBox();

int setInt(int a);

void setString(char* str);

}






.h File


extern "C" BOX_API Box* CreateCBox();

extern "C" BOX_API void DisposeCBox(CBox* pObject);







.c File


extern "C" BOX_API CBox* CreateCBox()

{

return new CBox();

}


extern "C" BOX_API void DisposeCBox(CBox* pObject)

{

if (pObject != NULL)

{

delete pObject;

pObject = NULL;

}

}




CBox 객체를 만들고 해당 객체를 반환하고,


CBox 를 받아서 해당 객체를 지워주는 함수 2개를 일단 생성한다.




함수 원형과 함수 구현을 .c , .h 파일로 나누어 두었는데,


.h 에 모두 구현하게 되면


.h(104): error C2491: 'CreateCBox' : dllimport 함수을(를) 정의할 수 없습니다.


라는 에러를 보게 될 것이다.







만들어진 C++ 의 Create, Dispose 함수를 C# 에서 사용 해 본다.









C#



namespace BoxConsoleApplication

{

    class Program

    {


        [DllImport("Box.dll", CallingConvention = CallingConvention.Cdecl)]

        static public extern IntPtr CreateCBox();

        

        

        [DllImport("Box.dll", CallingConvention = CallingConvention.Cdecl)]

        static public extern void DisposeCBox(IntPtr pTestClassObject);


        unsafe static void Main(string[] args)

        {


            IntPtr pCBoxClass = CreateCBox(); ;


            DisposeCBox(pCBoxClass );            


            pCBoxClass = IntPtr.Zero; 


        }

    }

}







이렇게 하면


C++ DLL 의


클래스가


만들어진다.





나머지 멤버 함수들을 가져오는 것은 다음에 정리한다.










C# 에서 C++ DLL 불러서 쓰기 #1

Programming/C# 2018. 2. 13. 15:39 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

C# 에서 C++ DLL 불러서 쓰기 #1



1. DllImport






DLL Import 시






        [DllImport("CPPDLL.dll"] ,  


         혹은 


        [DllImport("CPPDLL.dll", CallingConvention = CallingConvention.Cdecl)]



         쓰는 것을 볼 수 있다.






C#의 DllImport 특성은 기본 CallingConvention이 StdCall로 되어 있습니다.









DllImportAttribute Class

; https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute(v=vs.110).aspx


DllImportAttribute.CallingConvention Field

; https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.callingconvention(v=vs.110).aspx












일반적인 코드는 __cdecl, __stdcall에 상관없이 C#에서는 명시적인 CallingConvention 없이도 잘 실행됩니다.












하지만 .Net 4.0 이상의 빌드 환경에서는 


명시적인 CallingConvention 이 필요할 수 있습니다.


















.Net 4.0 이상에서는


        [DllImport("CPPDLL.dll", CallingConvention = CallingConvention.Cdecl)]


이 방법으로 사용하는 것을 추천합니다.


































참고 : http://www.sysnet.pe.kr/2/0/11132 [C# 개발자를 위한 Win32 DLL export 함수의 호출 규약 (1) - x86 환경에서의 __cdecl, __stdcall에 대한 Name mangling]






[성수] 사진창고

먹거리 2018. 2. 9. 15:47 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

[성수] 사진창고




































'먹거리' 카테고리의 다른 글

[화양동] 우화등선  (0) 2018.06.27
[성수/성수역] 춘하추우동  (0) 2018.06.27
[성수역] 메콩타이  (0) 2018.02.07
[성수/성수동/성수이마트] 분식집이다  (0) 2018.02.06
[성수/뚝섬역] 뽕앤까스  (0) 2018.02.05

[성수역] 메콩타이

먹거리 2018. 2. 7. 15:45 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

[성수역] 메콩타이































'먹거리' 카테고리의 다른 글

[성수/성수역] 춘하추우동  (0) 2018.06.27
[성수] 사진창고  (0) 2018.02.09
[성수/성수동/성수이마트] 분식집이다  (0) 2018.02.06
[성수/뚝섬역] 뽕앤까스  (0) 2018.02.05
[성수동/뚝섬역] 르베지왕  (0) 2017.12.14
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

[성수/성수동/성수이마트] 분식집이다





















라면과 김밥 퀄리티가 아주 좋습니다.



분위기도 좋고



간판이 희미해서 잘 보이지 않습니다.


잘 찾아오셔야 됩니다.








'먹거리' 카테고리의 다른 글

[성수] 사진창고  (0) 2018.02.09
[성수역] 메콩타이  (0) 2018.02.07
[성수/뚝섬역] 뽕앤까스  (0) 2018.02.05
[성수동/뚝섬역] 르베지왕  (0) 2017.12.14
[성수동/성수역] 차라리  (0) 2017.12.13

[성수/뚝섬역] 뽕앤까스

먹거리 2018. 2. 5. 14:42 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

[성수/뚝섬역] 뽕앤까스
























































깔끔하게 나오고


홀도 넓고


테이블 간격도 넓고 



좋습니다.





분위기 있는 스타일은 아니지만


깔끔한 밥집!


맛도 괜찮구요













336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

using System.Diagnostics;



Stopwatch sw = new Stopwatch();


sw.Start();





// TODO






sw.Stop();






MessageBox.Show(sw.ElapsedMilliseconds.ToString() + "ms");



MessageBox.Show(sw.Elapsed.Hour.ToString() + "Minute");

MessageBox.Show(sw.Elapsed.Minute.ToString() + "Minute");

MessageBox.Show(sw.Elapsed.Second.ToString() + "Minute");







Get Audio Device List

Programming/C# 2017. 12. 27. 11:02 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Get Audio Device List




using System.Management;


        public void getAudioDevice()
        {
            ManagementObjectSearcher objSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_SoundDevice");

            ManagementObjectCollection objCollection = objSearcher.Get();

            foreach (ManagementObject obj in objCollection)
            {
                String str = "";
                foreach (PropertyData property in obj.Properties)
                {
                    str += String.Format("{0}:{1}\n", property.Name, property.Value);
                }
                Console.Out.WriteLine(str + "\n\n");
            }
        }





참조 : https://stackoverflow.com/questions/1525320/how-to-enumerate-audio-out-devices-in-c-sharp

Watch Dogs 무료

Tip 2017. 12. 19. 10:37 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

K-013.jpg



Watch Dogs 무료


https://freetrial.ubisoft.com/promotions/watch-dogs-1/8/



[성수동/뚝섬역] 르베지왕

먹거리 2017. 12. 14. 11:30 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.































































https://m.store.naver.com/restaurants/detail?id=1875562479&entry=plt