Q&A

  • C C++에서 제작된 DLL사용시 Access Violation에러
고수님들의 조언 부탁드립니다.
* 먼저 아래는 dll 받을때 따라온 설명입니다.
  사용자id를 지정해주면 파일명 2개를 할당받는것입니다.
----------------------------------------------------------
정해진 이름 받기

  파일을 저장할 때 아래의 함수를 불러서 이름을 할당 받는다.
         BOOL AssignGetName(char * user, char * name1, char * name2)
      
      Parameters  
         Char *user      사용자 ID
         char * name1    할당받은 파일명1이 저장된다.
         Char * name2    할당받은 파일명2이 저장된다.

      Example  
         Char buff1[50], buff[50];
         AssignGetName("idname", buff1, buff2)

      Input Files
      없슴

      Output Files  
      없슴
----------------------------------------------


dll명 getAllnm.dll 이구요

아래와 같이 제가 정적으로 로드를 시킨뒤에
----------------------------------------------------------------
   function AssignGetName(user, name1, name2 : pchar):Boolean; stdcall;
       external 'getAllnm.dll' Name 'AssignGetName';
----------------------------------------------------------------

아래 같은 방법으로 값을 받으려고 했는데.
access violation 과 같은 에러가 납니다.
제가 변수등을 잘못 지정한것 같긴한데. 이리저리 바꿔봐도 잘 안되네요..
조언 부탁드립니다.
----------------------------------------------------------------
var
   cc : boolean;
   fid, finfofile, fdatafile : pchar;

begin  
   cc  := AssignFileName(fid, finfofile, fdatafile);  <=== 에러부분
----------------------------------------------------------------
3  COMMENTS
  • Profile
    김명찬 2004.07.06 01:48
    .
  • Profile
    이중철 2004.07.06 00:58
    var
       cc : boolean;
       fid, finfofile, fdatafile : array[0..49] of char;

    begin  

       cc  := AssignFileName(fid, finfofile, fdatafile);  
       위에것이 컴파일 에러나면 밑에거 이건 확실 ^^
       cc  := AssignFileName(@fid[0], @finfofile[0], @fdatafile[0]);  
       여기서 USERNAME을 알고 있으면
      strpcopy(@fid[0], 'Admin');
       cc  := AssignFileName(@fid[0], @finfofile[0], @fdatafile[0]);  



  • Profile
    너구리 2004.07.06 00:56
    포인터를 넘겨야 하는거 아닌가요?

    API함수들 보면 char의 포인터를 받아서 직접 글자를 써줍니다.

    그때 길이도 직접 받더군요..아마 저 DLL파일은 내부적으로 몇개까지

    배열을 넘겨 줘야 하는지 모르겠지만요..

    아마 저기 사용예에 50이라고 되있는거 보니 50자리를 고정해서 쓰나봅니다.

    그렇다면

    buff : Array[0..49] of char;

    이렇게 선언하시고..평션안에서 @buff 이렇게 넣어줘야 할거 같은데요..

    다른 파라미터들도 마찬가지 이구요..