2016-11-17 8 views
0

저는 C++를 통한 COM 프로그래밍을 배우고 있습니다. GetIDsOfNames에 함께vtable 인터페이스를 통한 Excel 사용

  1. 를 획득하게된다 IDispatch 인터페이스, 쿼리의 DISPID, 메소드 및 속성에 액세스 호출을 사용 : 내가 알고있는 것처럼, 듀얼 인터페이스의 클라이언트 측에서 두 가지 선택이있다.
  2. 프로젝트의 MIDL에서 만든 GUID가있는 .c 소스 파일과 인터페이스 정의가있는 .h 헤더 파일을 포함하고 .h 파일의 컴파일러로 알려진 vtable을 통해 직접 함수를 호출하십시오.

C++ 프로그램에서 매우 복잡한 Excel 통합 문서를 만들고 싶습니다. (C# 또는 다른 것 대신 C++을 사용해야한다고 주장합니다). 1.을 사용하여 올바르게 실행되는 프로그램을 작성할 수있었습니다. 그러나 두 가지 문제가 있습니다. (A) Invoke에 대한 호출로 인해 코드가 매우 어색합니다. (B) 상당히 빠르지 만 더욱 빨라지고 싶습니다.

그래서 저는 2 가지 방법을 시도하고 싶습니다. 나는 읽은 책의 예제와 달리 .h 및 .c 파일이 누락되었습니다.이 파일은 다른 예제 프로젝트가 아니라 Microsoft에서 작성하기 때문에.

내 질문은 :

    나는이 파일을 찾을 수
  • ?
  • 웨이 2에서 기대할 수있는 성능 향상 정도는 웨이 1과 비교했을 때 얼마나 좋을까요?
+0

더 .H 및 .c 인 파일이 없습니다 만, (에 Excel.exe에 번들) 형식 라이브러리가있다. ['#import directive'] (https://msdn.microsoft.com/en-us/library/8etzzkb6.aspx) –

+0

COM보다 C API XLL 인터페이스를 사용하는 것이 더 빠르고 더 빠를 것입니다. https://msdn.microsoft.com/en-us/library/office/bb687883.aspx –

답변

0

나는하지 않는 것이 좋습니다. 그리고, 내 이유가 ...

단순한 일로, excel.exe를 회전하고 한 프로세스에서 다른 프로세스로 데이터를 마샬링하면 대부분의 시간을 소비합니다. 이러한 것들은 C++ 인터페이스를 사용할 때 얻을 수있는 것보다 큰 규모입니다.

하지만 큰 이유는 다음과 같습니다. 어떤 이유로 든 Office가 클라이언트 컴퓨터에 올바르게 설치되거나 등록되지 않는 경우가 있습니다. 때로는 인터페이스가 올바르게 등록되지 않는 경우가 발생합니다. 인터페이스가 올바르게 등록되지 않으면 프로그램이 실패하는 이유를 알아 내려고 노력하고 있습니다. 결국 당신은 그것을 알아낼 수도 있습니다. 그런 다음 고객에게 Office를 다시 설치하고 올바르게 설치되기를 요청하거나 .reg 파일을 만들고 고객이 관리자 권한을 갖고 있고 어느 사용자인지 알 수 있도록 reg 파일을 적용하여 인터페이스를 수정하도록 고객에게 요청하십시오. 누락 된 인터페이스.

IDispatch를 사용하는 경우 인터페이스가 누락 되어도 상관 없습니다. 나는 이것을 워드로 힘든 방법으로 배웠다. 당신은 이미 당신이 주장하면 그 다음 당신이 시도 할 수

... 작업이 있습니다

#import "progid:Excel.Sheet" // plus a bunch of other options like rename() etc...