PB 호출 C# 작성된 Dll 클래스 라이브러리

6824 단어
c#에서 com 구성 요소를 작성하여 PB 호출 실례
선언: c#에 쓴 dll은 pb에 호출될 수 없으며,com 구성 요소로 작성되어야만 호출할 수 있으므로 c#로 dll을 쓸 때 주의해야 한다.

c#의 새 클래스 라이브러리


라이브러리 유형은 일반 라이브러리이고 항목 이름은 AddCom입니다.
 
1. 설정: 해결 방안 자원 관리자의AddCom을 오른쪽 단추로 클릭하고'속성'을 선택하며'응용 프로그램'->'프로그램 집합 정보'를 선택하고'프로그램 집합의COM을 보이게 하기'를 선택한 다음에'생성'을 클릭하고'COM 상호작용에 등록하기'를 선택한다.
 
2、AssemblyInfo. 열기cs 파일, [assembly: ComVisible(true)] 설정, 변경하지 않으면 다른 프로그램에서 호출할 수 없음
 
3. com 구성 요소를 작성하는 데 guid(전 세계 유일한 ID)를 사용하고 com 구성 요소를 작성하는 데 반드시 사용해야 한다.c#는 기본적으로 AssemblyInfo에 배치됩니다.cs, 만약 생성되지 않았다면 GUID 생성기로 생성할 수도 있고 인터넷에서 다음guid를 생성하는 소프트웨어로 만들 수도 있다
4. c#의 소스 코드는 다음과 같다.
 
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace AddCom
{
    [Guid("298D881C-E2A3-4638-B872-73EADE25511C")]
    public interface AddComInterface
    {
        [DispId(1)]
        int iadd(int a, int b);
    }
    [Guid("2C5B7580-4038-4d90-BABD-8B83FCE5A467")]
    [ClassInterface(ClassInterfaceType.None)]

    public class AddComService : AddComInterface
    {
        public AddComService()
        {
        }
        public int iadd(int a, int b)
        {
            int c = 0;
            c = a + b;
            return c;
        }
    }
}

 
이제 C#에 대한 Dll 작업이 완료되었으며 등록이 시작됩니다.

DLL 등록


등록에는 두 가지 방법이 있다
1、C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe E:\Test\MyLib.dll/tlb: E:\Test\MyLib.tlb
반등록: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe/u E:\Test\MyLib.dll/tlb: E:\Test\MyLib.tlb
(이 주소는 Framework를 설치한 물리적 주소로 자신의 컴퓨터에 따라 수정됨) 아래 그림에서 보듯이 성공적으로 등록되었습니다.
2、run("regasm MyLib.dll/tlb: MyLib.tlb",minimized!)
전제는regasm.exe 파일을 현재 항목으로 복사

PB 호출 DLL


pb에서ole조를 이용하여com 구성 요소를 호출합니다
OLEObject OLEObject 
long li_status
int li_reg
int li_cel

string a = "aa"
string b = "bb"

//  OLEObject  
OLEObject = Create OLEObject
//    
li_status= OLEObject.ConnectToNewObject("RakbLibrary.Class1")

if li_status<>0 then
    
    //     ,      ,       
    li_cel = run("regasm /u RakbLibrary.dll /tlb:RakbLibrary.tlb",minimized!)
    if li_cel <> 1 then
        messagebox('  ','     !')
        return
    
    else
        messagebox('  ','     !')
        
        li_reg = run("regasm RakbLibrary.dll /tlb:RakbLibrary.tlb",minimized!)
        if li_reg<>1 then
            messagebox('  ','      !')
            return
        else
            messagebox('  ','      !')
        end if
    end if
else
    //         
 li_res = OLEObject.getForm(a,b)
end if
//    
OLEObject.DisConnectObject()

반환값이 -3이면 Object could not be created에서 exe 실행 파일을 생성하면 됩니다.
주의: listatus 연결 상태가 0이면 DLL 연결이 성공했음을 의미합니다. 그렇지 않으면 DLL이 등록되지 않았을 수도 있습니다. 다시 등록해야 합니다.
   li_cel 등록 상태가 1이면 등록 성공
OLEObject.DisConnectObject()         DLL       ,              

모든 필요한 파일 (C#의 dll 파일과 tlb 파일,regasm.exe) 은 프로젝트의 루트 디렉터리에 놓고, 이 몇 개의 파일은 같은 디렉터리에 두어야 한다

좋은 웹페이지 즐겨찾기