2010-08-22 5 views
1

명령 줄에서 COM DLL을 참조하는 .cs 프로그램을 어떻게 컴파일합니까? csc.exe를 사용하여 COM DLL을 참조하는 어셈블리를 컴파일하십시오.

나는 다음과 같은 경로로 COM DLL을 가정 : C : \ 프로젝트는 \ com1.dll 가정 C# 코드는 파일에 있습니다 : C :이 CSC를 시도했습니다 program.cs

\ 프로젝트 \. EXE/lib : "C : \ Projects"/reference:com1.dll "C : \ Projects \ program.cs"

program.exe를 얻으려고하면이 방법으로 COM dll에 대한 참조가 잘못되었습니다. .

- 첫 번째 대답을 참조에 세부 사항을 추가 - 좋아,이 경우에는 가정 내가

Type library imported to ADOR.dll 

지금 새 DLL에 의해 만든 배치이 응답을 얻기 ADO

tlbimp "C:\Program Files\Common Files\Syste \ado\msador15.dll" 

을 사용하고 있습니다 tlbimp는 ADODB를 사용하는 프로그램과 같은 디렉토리에 있습니다.

csc /lib:. /reference:ADOR.dll Program.cs 

반환

Program.cs(2,7): error CS0246: 
The type or namespace name 'ADODB' could not be found 
(are you missing a using directive or an assembly reference?) 

- 오버로드 문제 - 당신은하지 COM 직접 DLL, 그 interop 어셈블리 tlbimp와 (또는 손으로)과 기준을 만들어야합니다

using System; 
using ADODB; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Connection connection = new Connection(); 
     connection.Open(args[0]); 
     //connection.Open(args[0], "", "", -1); 
     Console.WriteLine(connection.State); 
     connection.Close(); 
    } 
} 

답변

2

. com1.dll에서 tlbimp를 실행 한 다음 tlbimp가 생성하는 Interop.com1.dll (또는 interop이라고하는 항목)을 참조하십시오. tlbimp를 사용하려면 COM 구성 요소에 형식 라이브러리가 있어야합니다. 당신은 당신이 /namespace:Foo를 사용할 필요가 Foo을 지정하려면

tlbimp의 기본 네임 스페이스는 Interop.Foo하지 Foo 될 것입니다.

+0

오케이 - 시도해 보았습니다. 특정 예제로 ADO COM DLL 사용. 불운. 나는 다른 것을 놓치고 있니? 어쩌면 ADO에는 형식 라이브러리가 없습니다. tlbimp.exe의 오류 메시지가 없습니다. – user410159

+1

ADODB가 올바른 네임 스페이스인지 확인 하시겠습니까? 생성 된 어셈블리에서 ildasm 또는 반사기를 사용하여 주위를 훑어 볼 수 있습니다. –

+0

아니요, ADODB이 올바른 네임 스페이스가 아닙니다. Visual Studio에서 추가 한 참조 - COM을 통해 거기에 추가했을 때 네임 스페이스이기 때문에 가정했습니다. Reflector와 ADOR에서 검사하여 ADODB 네임 스페이스를 강제했습니다. 문제는 그것이 모든 수업을 들여오고 싶어하는 것처럼 보이지 않는다는 것입니다. Visual Studio에서 연결 한 시점을 보여주는 Connection이 누락되었습니다. Connection 객체를 인스턴스화하려면 명령 행에서 컴파일하지 않습니다. 그것 같이 그것은 단지 이용 가능한 것의 부분을 설정합니다. – user410159

관련 문제