문제

Excel addin (xll)에 특정 기능이 있습니다. AddIn은 독점적이며 소스 코드에 액세스 할 수 없습니다. 그러나 AddIn 내에 포함 된 일부 기능을 호출해야하며 C# 프로그램에서 호출하고 싶습니다.

현재 XLOPERS로 Excel 함수를 호출하는 C ++ 인터페이스를 작성한 다음 C#에서이 C ++ 인터페이스를 호출하려고 생각했습니다.

이런 종류의 문제에 대한 사전 경험이있는 사람이 그에게 가장 적합한 해결책이 무엇인지 알고 있습니까?

앤서니

도움이 되었습니까?

해결책

당신은 만들어야합니다 가짜 xlcall32.dll, XLL과 동일한 디렉토리에 넣으십시오 (Excel의 자체 XLCall32.dll을 경로에 넣지 마십시오). 다음은 몇 가지 코드입니다.

# include <windows.h>

typedef void* LPXLOPER;

extern "C" void __declspec(dllexport) XLCallVer ( ) {}

extern "C" int __declspec(dllexport) Excel4 (int xlfn, LPXLOPER operRes, int count,... ) { return 0; }

extern "C" int __declspec(dllexport) Excel4v(int xlfn, LPXLOPER operRes, int count, LPXLOPER far opers[]) {return 0;}

이제 xll이라는 xll이라는 xll-dll.xll (내보내기 함수의 이름을 찾으려면 "expends.exe"라는 함수가있는 xll을 가지고 있다고 가정 해보십시오. __cdecl xladd (xloper* pa, xloper* pb);

다음 코드는 다음을 호출합니다.


# include <windows.h>
# include <iostream>

// your own header that defines XLOPERs
# include <parser/xll/xloper.hpp>

// pointer to function taking 2 XLOPERS
typedef XLOPER * (__cdecl *xl2args) (XLOPER* , XLOPER* ) ;

void test(){
/// get the XLL address
HINSTANCE h = LoadLibrary("xll-dll.xll");
if (h != NULL){
xl2args myfunc;
/// get my xll-dll.xll function address
myfunc = (xl2args) GetProcAddress(h, "xlAdd");
if (!myfunc) { // handle the error
FreeLibrary(h); }
else { /// build some XLOPERS, call the remote function
XLOPER a,b, *c;
a.xltype = 1; a.val.num = 1. ;
b.xltype = 1; b.val.num = 2. ;
c = (*myfunc)(&a,&b);
std::cout << " call of xll " << c->val.num << std::endl; }
FreeLibrary(h); }
}

int main()
{test();}

내 exe는 실제로 (내 자신의 놀라움으로) 작동하고 예상대로 3을 출력합니다. XLL이 실제로 매개 변수에 대해 기대하는 것에 대한 지식이 있어야합니다. 메모리를 할당하면 #define xlbitdllfree 0x4000이 xloper c-> 유형에 설정되어 있는지 확인하고 "xlautofree"를 다시 호출해야합니다.

다른 팁

xll plus를 시도하고 싶을 수도 있습니다 http://www.planatechsolutions.com/xllplus/default.htm. 약간 비싸지 만 XLL 래퍼 라이브러리 기능은 정확히 귀하가 찾고있는 것입니다.

"때로는 C ++, Java, C# 또는 Visual Basic으로 작성된 명령 줄 프로그램 또는 대화식 응용 프로그램과 같은 다른 환경에서 Excel 애드 인 기능을 호출하는 것이 유용합니다. XLL 래퍼 툴킷에는 도구, 런타임이 포함되어 있습니다. Excel XLL 애드 인을 감싸는 COM 모듈 및 .NET 어셈블리 개발에 도움이되는 라이브러리, 샘플 및 문서 "

우수한 애드 인 DLL은 C#로 작성 될 수 있습니다. 그렇다면 Excel을 모두 우회 할 수 있습니다. 그래도 래퍼가 필요할 수 있습니다.

Plguin을 설치하는 프로그램 파일에서 조립품을 사용할 수 있는지 확인하고 C# 프로젝트에 직접 조립을 참조하십시오 - 클래스, 메소드 또는 객체의 객체 브라우저를 확인하십시오.

반사를 사용하여 Addin에 액세스 할 수 있어야합니다. 사용해보십시오 반사기 사용 가능한 것을 보려면.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top