2014-10-21 4 views
0

VBA에서 DLL 함수를 호출하면 VBA가 실행을 중지합니다. 이 함수는 배열과 정수를 기대하지만, 프로그램을 디버깅 할 때 함수가 작동하지 않습니다.배열 참조 VBA

DLL은 다른 사람이 만들고 DLL 정보를 사용할 수 있습니다.

Declare Function loadModel Lib "Test.dll" (ByVal numArgs As Integer, args As String) As Integer 

    filename = "Tjet.mxl" 
    ArgumentList(0) = "Filename:" 
    ArgumentList(1) = filename 
    ArgumentList(2) = "Show model:" 
    ArgumentList(3) = False 
    ArgumentList(4) = "Show Progress" 
    ArgumentList(5) = True 

    model = loadModel(6, ArgumentList(0)) 

그러나 이것은 작동하지 않습니다. VBA에서 Array를 어떻게 참조합니까?


DLL의 델파이 코드는 다음과 같습니다

TdLoadModel = function(numArgs: Integer; args: PPAnsiChar): Integer; cdecl 

loadModel : TdLoadModel 

// loadmodel 
SetLength(ArgumentList, 6); //will create an array of 3 AnsiStrings 
ArgumentList[0]:='-filename'; 
ArgumentList[1]:='TJET.mxl'; 
ArgumentList[2]:='-showModel'; 
ArgumentList[3]:='false'; 
ArgumentList[4]:='-showProgress'; 
ArgumentList[5]:='true'; 
PArgumentsList := @ArgumentList[0]; 
loadModel(6, PArgumentsList); 

내가 인수에 가입하면, 나는 아직도 약간의 오차가 있어요. 나는 프로그램과 DLL 제작자에게 오류를 보내지 만 여전히 대답을 기다리고있다. 제 질문은 : DLL이 실제로 배열인지, 아니면 내 기대가 잘못 되었습니까?

+0

어떻게 당신은'.dll' 배열을 기대하고 있음을 알 수 있습니까 (즉이 제대로 선언 가정)? 당신은 말했다 : *'함수는 배열과 정수'를 기대한다. * 그러나 당신의 선언은 틀린 순서로 보인다. 그리고 당신은 단일 변수'Integer'와'String'을 전달할 것이고'args() String' –

답변

0

이 함수는 String의 배열을 기대하지 않고 String이라는 단일 배열을 기대합니다. 당신은 Join해야 당신의 ArgumentList

model = loadModel(6, Join(ArgumentList)) 
+2

공백으로 구분 된 인수 문자열을 기대한다는 것을 어떻게 알 수 있습니까? –

+0

@ Jean-FrançoisCorbett 하나는 함수가 선언에서'String'을 기대한다는 것을 알고 있습니다. 1) 대부분의 라이브러리 함수와 명령 인터프리터에서 일반적으로 사용되며, 2) 'Join'에 대한 기본값이기 때문에 인수 목록은 공백으로 구분됩니다. –