Q&A

  • 더 자세히 올림.vb으로 만든 dll을 delphi에서 콜하고 싶은데요....
비베로 만든 dll이 있습니다.
콜하는것은

procedure TRealView.Multiddll;
type
//dll에 있는 함수 파라메터와 리턴값
  TFunc = function(vxx:single;vyy:single;vzz:single;nam:string):double;stdcall;
var
//=================
    H:Thandle;
    MyFunc:TFunc;
    s,press:string;
    dou:double;
    a,b,c:integer;
//====================

begin
  a:=1;b:=1;c:=1;
  H:=LoadLibrary('MultiD_DLL.dll');
  if(H>32) then           //dll을 찾지 못하면 32보다 작은 수를 반환
  begin
    @MyFunc := GetProcAddress(H,'GetValue_MultiD');
    if(@MyFunc <> nil) then    //주소를 얻지 못하면 nil을 반환
    begin
      //press:=
      dou:=MyFunc(a,b,c,press);
//      Realview.Caption(s);
      ShowMessage(FloatToStr(dou));
    end

    else
    begin
      s:='MultiD_DLL.dll의 GetValue_MultiD(주소 얻는데 실패)를 찾을수 없다!';  //-----1번 오류 출력!!!
      ShowMessage(s);
    end;
    FreeLibrary(H);
  end
  else
  begin
    s:='MultiD_DLL.dll을 찾을수 없다';
    ShowMessage(s);
  end;

end;

이렇게 불러오고 있는데..dll찾는 것은 되지만 dll에 있는 함수를 찾지 못하고...계속해서

1번 오류가 출력되고 있습니다.
왜 그런지 알려주세요..
문법은 맞는거 같은데..혹...틀린점이 있으면 알려주세요!!.
부탁 합니다.
3  COMMENTS
  • Profile
    하얀까마귀 2004.11.23 20:34
    안녕하세요 하얀까마귀 입니다.

    자세히 봐야 겟지만 설정부분에서 눈에 거슬리는게 있네요..

    비베에서 어떻게 파라메터를 지정했느냐에 따라서 다르겠지만
    일단은 string형은 델파이 만의 것이므로 저건 아니라 생각되네요

    pchar로 바꿔보세요. 원래의 vb파라메터가 뭔지 알수 있으면 더 좋을듯
    하군요. 그럼..


  • Profile
    박상현 2004.11.23 20:51
    답변 감사합니다.
    vb activeX dll입니다.
    함수는
    GetValue_MultiD(X as Long,Y as Long, Z as Long, VariableName as String) As Double

    이거이고..이 함수를 호출하면 double을 반환하여 그 값을 쓰려고하는데

    dll은 읽지만 함수에 주소를 못가저 옵니다.오류가 그부분에 서 나거든요.

    다른 방법은 없는지요...


  • Profile
    정찬희 2004.11.23 23:17
    ActiveX DLL은 레지스트리에 등록해놓고 CreateOleObject로
    인터페이스를 생성하여 호출해야 할거 같은데요...
    VB에서는 ActiveX DLL 밖엔 못만들죠...^^*

    VB상에서 클래스의 멤버로 만든 함수가 아니면 DLL 외부에선 쓸수가 없습니다.
    그냥 모듈에 전역함수로 만들어 놓으신거라면 그함수를 호출하기만 하는
    다른 래퍼 클래스를 만드시고 다시 빌드하세요
    일단 레지스트리에 등록한후 델파이에서 Project -> Import Type Library 메뉴로 가져와 보세요.. 생성된 소스의 인터페이스를 보시면 델파이에서 쓸수있게
    바뀌어 있을거예요...