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

c# dll ClassLibrary 에서 MessageBox.Show(text,title);


c# dll 을 만들다가


c#의 MessageBox를 사용하고 싶을때가 있다.



그럴때는


바로


using System.Windows.Forms;


하면 안 되고




System.Windows.Forms 을 참조 해주어야한다.




VS2013


[프로젝트이름]우클릭 -> [추가] -> [참조] -> [어셈블리] -> [프레임워크] -> [System.Windows.Forms] 를 체크해주면 해당 라이브러리를 자동으로 참조해준다.



그 다음 



using System.Windows.Forms;



를 쓰고


MessageBox.Show("mySocket is Null", "strTitle");


MessageBox 를 사용하면 된다.



C# Class Library use in script

Programming/C,CPP,CS 2016. 4. 5. 16:58 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

C# Class Library use in script




C# Class Library



namespace ClassLibrary2

{

    // Interface declaration.

    public interface ICalculator

    {

        int Add(int Number1, int Number2);

    };

    [ProgId("Test.SimpleCalc")]

    public class SimpleCalc : ICalculator

    {

        public int Add(int Number1, int Number2)

        {

            return Number1 + Number2;

        }

    }

}





이런 형태 일때

JavaScript 에서 부르는 방법



JavaScript 에서는 주로 


요런 형태로 DLL 을 로드한다.


<object name="Class1" id="Class1" classid="CLSID:*-*-*-*" width="0" height="0"></object>


일단 임의의 CLSID 를 만들어낸다


Visual Studio [도구] [GUID 만들기] 로 GUID 를 하나 만들어 낸다.



{3963CDD9-1079-463A-BCDA-0182D296C9B6}


namespace ClassLibrary2

{

    // Interface declaration.

    public interface ICalculator

    {

        int Add(int Number1, int Number2);

    };

    [ProgId("Test.SimpleCalc")]

    [Guid("3963CDD9-1079-463A-BCDA-0182D296C9B6")]

    public class SimpleCalc : ICalculator

    {

        public int Add(int Number1, int Number2)

        {

            return Number1 + Number2;

        }

    }

}



객체에 GUID 를 설정한다.




그다음 regasm 으로 등록한다.

등록할때 /codebase 옵션을 붙여야한다.

codebase 옵션을 붙이려면 어셈블리 서명이 필요하다.


어셈블리 서명은

Properties

[서명]

[어셈블리 서명] 에서 

새로만들기로 편한대로 만들면된다

키 파일 이름, 암호 없음







그다음 html 에서

<object name="Class1" id="Class1" classid="CLSID:3963CDD9-1079-463A-BCDA-0182D296C9B6" width="0" height="0"></object>

    <script>
        function TestAdd() {
            var ctrl = document.getElementById("Class1");
            ctrl.Add(13,4);
        }
    </script>





실행하면 잘 된다.





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

C# Class Library use in java (클래스 라이브러리)



Java 에서 C# 클래스 라이브러리를 불러오기




C# 클래스 라이브러리가


namespace ClassLibrary2

{

    // Interface declaration.

    public interface ICalculator

    {

        int Add(int Number1, int Number2);

    };

    public class SimpleCalc : ICalculator

    {

        public int Add(int Number1, int Number2)

        {

            return Number1 + Number2;

        }

    }

}



그리고

잊지 말아야할 설정들



[assembly: ComVisible(true)]


COM Interop 등록





JACOB 라이브러리를 활용하여 C# DLL 을 불러와 보겠다.



http://danadler.com/jacob/


에 들어가서 기본 라이브러리를 추가한다.




jacob.jar 를 Java Build Path 에 추가한다.


ActiveXComponent xl = new ActiveXComponent("Test.SimpleCalc");


try {

   System.out.println(Dispatch.call(xl, "Add", new Variant(1), new Variant(2)));

} catch (Exception e) {

e.printStackTrace();

}


JACOB 라이브러리는 기본적으로는 ProgID 를 통해 DLL 파일을 불러온다.




위의 C# 클래스 라이브러리는 ProgID 가 없다.


namespace ClassLibrary2

{

    // Interface declaration.

    public interface ICalculator

    {

        int Add(int Number1, int Number2);

    };

    [ProgId("Test.SimpleCalc")]

    public class SimpleCalc : ICalculator

    {

        public int Add(int Number1, int Number2)

        {

            return Number1 + Number2;

        }

    }

}



ProgID 를 추가하여 준다.




그 다음 해당 파일을 regasm 으로 등록한다.



그런 다음 Java 를 실행해 보면


Add 가 정상적으로 작동한다.


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

C# Class Library


VS2013


새 프로젝트 -> Visual C# -> 클래스 라이브러리 -> 프로젝트 이름(Library 이름이 된다, 예제에서는 ClassLibrary2 이다.) -> 


자동으로 Class1.cs 파일이 만들어진다.


이 Class1.cs 가 DLL 에서 불러쓸 객체의 이름이 된다.



참고 : https://support.microsoft.com/en-us/kb/828736




Class1.cs 를 우클릭하여 이름바꾸기 원하는 객체 이름으로 바꾼다.




예제에서는 SimpleCalc 로 진행한다.



----------------------------------------------------------------


SimpleCalc.cs


----------------------------------------------------------------


namespace ClassLibrary2

{

    public class SimpleCalc

    {

    }

}


----------------------------------------------------------------



interface 를 추가 구현한다.

// Interface declaration.
public interface ICalculator
{
    int Add(int Number1, int Number2);
};



----------------------------------------------------------------


SimpleCalc.cs


----------------------------------------------------------------


namespace ClassLibrary2

{

    // Interface declaration.

    public interface ICalculator

    {

        int Add(int Number1, int Number2);

    };

    public class SimpleCalc

    {

    }

}



----------------------------------------------------------------


interface를 상속 받고

interface 로 부터 상속받은 메서드를 구현한다.


// Interface implementation.
public class ManagedClass:ICalculator
{
    public int Add(int Number1,int Number2)
        {
            return Number1+Number2;
        }
}




----------------------------------------------------------------


SimpleCalc.cs


----------------------------------------------------------------


namespace ClassLibrary2

{

    // Interface declaration.

    public interface ICalculator

    {

        int Add(int Number1, int Number2);

    };

    public class SimpleCalc : ICalculator

    {

        public int Add(int Number1, int Number2)

        {

            return Number1 + Number2;

        }

    }

}




----------------------------------------------------------------


이제


Properties 를 열어서


AssemblyInfo.cs 를 열어보면


[assembly: ComVisible(false)] 를 찾아서



[assembly: ComVisible(true)]


로 변경한다.



[assembly: ComVisible(true)] 로 바꾸어야 ActiveX 로 사용이 가능하다.





이제 빌드하면


bin/Debug 폴더에


ClassLibrary2.dll 파일이 만들어진다.



궁극적으로 배포를 목적으로 하므로


Release 모드로 바꾸어준다.




빌드를 하게 되면


ClassLibrary2.dll 파일이 만들어진다.



하지만 클래스 내부의 구조가 보이게 하려면


tlb 파일이 필요하다


이 파일은


ClassLibrary2 프로젝트이름을 더블클릭하면 뜨는 속성 창에서


[빌드]


COM Interop 등록 을 체크해준다.


그러면 이제부터 빌드를 하면 tlb 파일도 같이 만들어진다.





tlb 파일과 dll 파일을 C# DLL 을 사용할 프로젝트의 폴더로 복사한다.




예제에서는 MFC 에서 해당 DLL 파일을 불러서 사용해보겠다.



사용할 cpp 파일에서



#import "ClassLibrary2.tlb" raw_interfaces_only

using namespace ClassLibrary2;


를 선언한다.





그 후 사용을 원하는 함수에서




HRESULT hr = CoInitialize(NULL);


// Create the interface pointer.

ICalculatorPtr pICalc(__uuidof(SimpleCalc));


long lResult = 0;


// Call the Add method.

pICalc->Add(5, 10, &lResult);


SetDlgItemInt(IDC_STERM, (int)lResult);


// Uninitialize COM.

CoUninitialize();





이렇게 사용을 하면 된다.



ICalculatorPtr 은 Interface 로 만든  ICalculator 의 스마트포인터이다


ICalculator* 와 같다.





pICalc-> 을 통해 내부에 있는 속성과 메서드에 접근이 가능하다.