Q&A

  • C 로만든 Dll 호출시 access violation error
고수 님등 부탁 드림니다 ..꾸벅

아래는 C에서 선언된 함수 입니다
unsigned WINAPI Scif_DataRX(void* p);
extern "C" __declspec(dllexport) short __stdcall M_ReadData(char *romData);
extern "C" __declspec(dllexport) short __stdcall M_SelectCOM(short COMport);
extern "C" __declspec(dllexport) short __stdcall M_Ver_Data(VerData *verData);

그리고 Dalphi 에서는
  function M_ReadData (var romData: Byte):   Integer;  stdcall; external 'PIC.dll';
  function M_SelectCOM(var COMportNo: Byte): Integer;  stdcall; external 'pic.dll';
  function M_Ver_Data (var VerData: Byte):   Integer;  stdcall; external 'pic.dll';

호출 부문은
procedure TBPI_002M.Bt_AddClick(Sender: TObject);
var
  i, j,  Ret : Integer;

  strRomData : String;
begin

  ret := 1;
  while ret <> 0 do begin
        ret := M_ReadData(romData[0]);
  end;

  strRomData := '';
  For i := 0 To 32 do  begin
      strRomData := strRomData + IntToHex(romData[i],2) + ' ';
  end;

컴파일 했을때 access violation 이 나옵니다
부탁 드리겠습니다..
3  COMMENTS
  • Profile
    이광수 2004.09.04 23:44
            ret := M_ReadData(PChar(romData));

    해야됩니다.

    char * = pChar 입니다.

    romData[0] 로 보내면 첫번째 문자가 가겠죠.

    아 첫번째 글자도 아니군요.
    델파이의 스트링 인덱스는 1부터 시작입니다.



  • Profile
    박영준 2004.09.06 21:20
    답변 감사합니다
      설명하신대로
      ret := M_ReadData(PChar(romData));
    로 작성하고 컴팡일 하니까
    invalid typecast error 가 뜨내요?

    염치 불구하고 재차 부탁 드립니다 ..

  • Profile
    srookie 2004.09.07 00:10
    안녕하세요.
    dll의 함수 정의를 var로 하셨네요.
    var인 경우에는 string을 PChar로 형변환하여 넘기지 못합니다.
    var은 Call By reference이기 때문이죠. 그때문에 invalid typecase error도 발생하는 것으로 보이네요.
    에러가 안나게 하실려면 romData를 Byte Array에 복사하신 후에 Array[0]번을 넘겨주시던지, 아님 함수의 인자를 조금 바꾸심 어떨까 싶네요.
    예를 들어서 function M_ReadData (romData: PByte):   Integer;  stdcall; external 'PIC.dll';
    머 이런식으로 말이죠.
    실험은 안해서 모르겠지만, 아마 똑같이 동작할 것으로 생각이 됩니다.
    그럼 즐프하세요~

    • 김재영
    • 2004.09.07 19:53
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2004.09.07 19:59
      "컴포넌트 저장" 으로 검색을 해보세요. 그걸 보시면 아마도 해결이 가능할꺼 같은데요.. ^^
    • 황성욱
      2004.09.07 20:48
      DataSnap 사용하셔서 해보세요. TClientDataSet에 보면 FehchOnDemand, Packetrecords, GetNextPacket등을...
    • 초보지만 델사랑
      2004.09.07 19:04
      짧은 소견으로는 query로 해결 하시면 될 듯한데요... Mysql은 limt명령어가 있고. Oracle은 써 본지...
    • ㉳㉥ㅗ㉣ㅐ㉧ㅛ
      2004.09.07 19:09
      답변 고맙습니다.... 그럼 컴포넌트로 제한할수 있는 방법은?
    • nilriri™
      2004.09.07 19:31
      콤포넌트(디비그리드)에서 제한 한다면.. 전체 자료중 일부만 보여주는 의미가 없어 보입니다. 제 ...
    • 이재욱
    • 2004.09.07 14:19
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 박상윤
      2004.09.16 02:41
      음.. 이런식으로 연결 하시면 됩니다. 스마트티를 써서 분리한뒤 화면에 랜더하고 파일에 압축하여 저...
    • 박상윤
      2004.09.10 00:52
      음.. 방법이 전혀 틀리셨군요. DirectShow 프로그램 하시면. 다 해결됩니다. wmv 인코딩해서. 파일로 저...
    • 타락천사
      2004.09.07 18:09
      안녕하세여. 타락임다. 질문을 보면, 어플에서 인코딩하면서 캡춰도 같이 하려고 하는것이 문제 입니다....
    • 구창민
      2004.09.07 22:27
      안녕하세요.. 아마도 이렇게 Result := CallNextHookEx(HKbHook, Code, myW, myL); case 문을 수...
    • 파멸의슬픔
      2004.09.07 18:06
      원하시는 자료가 이게 맞는지 모르겠네요... procedure TForm1.Edit1KeyPress(Sender: TObject; var Key...
    • 정찬희
      2004.09.08 00:26
    • 놀부
      2004.09.08 02:55
    • 정찬희
      2004.09.08 07:07
    • 정찬희
      2004.09.08 07:15
    • 놀부
      2004.09.08 08:08
    • 정찬희
      2004.09.08 08:52
    • 놀부
      2004.09.08 09:09
    • • • •
    • 이성수
    • 2004.09.07 04:46
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2004.09.07 22:32
      안녕하세요.. 아래에 투명 에디트 컴포넌트 소스를 올려드릴께요.. 물론 Free 이구요 .. 원하시는 대...
    • 이성수
      2004.09.07 23:06
      안녕하세요? 답변에 정말 감사드립니다. 정확하게 원하던 방법은 아니지만, 그런대로 괜찮네요.. 제...
    • 타락천사
      2004.09.07 18:03
      안녕하세여. 타락임다.. 그림판에서 텍스트를 클릭하면, 클릭한 영역을 검사해서 텍스트가 있는 부분...
    • 이성수
      2004.09.07 18:27
      답변 감사드립니다. 그림판에 각종 그림을 그린 후에, 글씨도 입력받아 쓰게 할려는 거거든요. 근데, ...
    • 석주현
      2004.09.07 08:17
      예전에 저도 지금 하시는 것과 비슷한걸 했었는데요.. 전 그냥 Label1 를 놓고 Label1 에 마우스가 눌...
    • 이성수
      2004.09.07 18:29
      답변 감사드립니다. 그림판에 각종 그림을 그린 후에, 글씨도 입력받아 쓰게 할려는 거거든요. 라벨을 ...
    • 이진기
    • 2004.09.07 01:24
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박상윤
      2004.09.10 00:57
      글세여.아마도 SDK에 있는 예제를 참고하셔야 할듯 direct SDK 9.0 에 amcap 이나 BDA 샘플을 참고하십...
    • 윤용섭
    • 2004.09.07 01:08
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2004.09.07 03:07
      안녕하세요. 최용일입니다. 공개입니다. Open Source Project죠... 9버전이 최신거구요... 델파이 4...
    • 윤용섭
      2004.09.07 04:48
      감사합니다. 오늘 궁금한거 다 찾아가네요. 앞으로도 잘 부탁드려요 ^^
    • 고락춘
    • 2004.09.06 22:34
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 고락춘
      2004.09.07 01:01
      우선 답변주신 닐리리님, 소나기님... 답변 감사드립니다. 제가 자바하다 델파이를 시작한지 몇일 되...
    • 석주현
      2004.09.07 00:50
      비슷한 코드를 만들어서 테스트 해봤는데 문제가 없었습니다. 다른 문제가 아닐런지. -_-;; 코드상 문...
    • nilriri™
      2004.09.06 23:04
      Access violation.. 에러는 존재하지 않는 것을 참조할때 발생하는 에러입니다. i = 1 일때 발생하는 ...
    • 최동열
    • 2004.09.06 19:49
    • 5 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2004.09.06 22:49
      25만건이나 되는 자료가 없어 직접 테스트 해보진 못했습니다. 레지스트리 겁색을 해본바로는.. HK...
    • 최동열
      2004.09.06 23:03
      답변해주셔서 감사합니다. 알려주신데로 설정해보았습니다만..... 똑같은 메시지가 발생합니다. 제 컴레...
    • nilriri™
      2004.09.07 00:16
      기존 25만건 테이블의 이름을 다른걸로 임시로 바꿔 놓습니다. 이름을 바꾼 파일을 복사하여 붙여넣기를...
    • nilriri™
      2004.09.06 23:54
      이 오류는 테이블에 사용할 수 있는 최대 열 수 또는 단일 파일에 대한 최대 잠금 수를 초과할 때 나타납니...
    • 최동열
      2004.09.07 01:53
      저 또한 대책이 없기에 자료를 다시 생성했습니다. 시간이 많이 걸리는 관계로 쉽게 해볼까... 했는데 ...
    • 신석기
    • 2004.09.06 18:04
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2004.09.06 18:22
      안녕하세요. 최용일입니다. 델파이 7 버그입니다... 프로젝트에 빈폼하나 추가한뒤 다시 제거하시면 ...
    • 신석기
      2004.09.07 20:53
      않되는데요... 큰일이네... 꼭 해결해야 하는 문젠데... 다변 감사합니다.^^
    • 이광수
      2004.09.07 23:38
      http://www.delmadang.com/cwb-bin/CrazyWWWBoard.exe?db=dmdlec&mode=read&num=1858&page=1&backdepth=1
    • 신석기
      2004.09.08 06:01
      음... 임시로 해결했습니다.^^ 하지만 다시열면 아직도 비활성화되고... 저장하지 않아도 tlb화일에 해...
    • 석주현
      2004.09.07 21:01
      파레트 옵티마이징 데모네요. 인터넷에서 찾았구요. 컨버팅은 이거 보시면 가능할꺼 같네요.. ^^
    • 석주현
      2004.09.07 20:11
      시샵님께서 해주신 데로 하면 무조건 바뀝니다. 그런데 아시지만 그림이 거의 색이 죽어 버립니다. ...
    • 최용일
      2004.09.06 18:21
      안녕하세요. 최용일입니다. 간단합니다. 비트맵파일 열어서 픽셀포멧만 바꾸어서 저장하시면 됩니다... ...
    • 백록화
      2004.09.05 05:17
      yo` 와~ 많네여 ^^ 자료실에 보시면 함수레퍼런스나 오브젝트 파스칼 문법에 관한 문서 있습니다. 한...
    • 이지은
      2004.09.06 10:51
      답변 감사드려요~ 근데 한가지 질문이 더 생겨서요~ str=copy(row,j*8+1,8) 예를 들어 이런 문장이 ...
    • 최용일
      2004.09.06 18:32
      안녕하세요. 최용일입니다. 흠... 다른 형태로의 표현이라는게 뭔지는 잘 모르겠지만... Copy함수...
    • 김춘경
      2004.09.07 05:41
      파일 형태로 출력은 LPT 포트만 가능합니다. COM 포트는 컴포넌트를 사용하시면 됩니다. 한델 자료실에...
    • 백록화
      2004.09.05 05:23
      yo` 흠...소스상으로는 별문제 없어 보입니다만....전 Comport 관련 콤포넌트로 작업했었거든요 ^^;; ...
    • 박영준
    • 2004.09.04 23:19
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이광수
      2004.09.04 23:44
              ret := M_ReadData(PChar(romData)); 해야됩니다. ...
    • 박영준
      2004.09.06 21:20
      답변 감사합니다   설명하신대로   ret := M_ReadData(PChar(romData)); 로 작성...
    • srookie
      2004.09.07 00:10
      안녕하세요. dll의 함수 정의를 var로 하셨네요. var인 경우에는 string을 PChar로 형변환하여 넘기지 못...
    • 유정헌
    • 2004.09.04 19:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 파멸의슬픔
      2004.09.05 03:06
      우선 Indy 버전이 Indy8.009 이상 이여야 하구요... 델파이 디렉토리 밑에 source/toolsapi/dsgnIntf.pas...
    • 김춘경
      2004.09.07 05:13
      먼저 시스템설정의 해당 COM포트 속도와 프린터 출력용 컴포넌트의 속도가 동일해야 합니다. 또한 흐름제...
    • 백록화
      2004.09.05 01:21
      STP131 이라면..커터날이 달린 아담사이즈의 그 프린터 같은데.. 작년인가? 두세개 연결 해본거 같은...
    • 박재용
      2004.09.05 01:38
      흑... 제가 컴포트로 출력하는 방법을 모르는거 같아요 ㅠㅠ 출력방법도 아르켜 주세요... LPT1으...
    • 백 진욱
      2004.09.05 20:56
      우선 포트관련 컴포넌트를 사용하시나 모르겠네요! Com 포트를 통해서 출력하려면 이컴포넌트를 사용하...
    • Mountain
    • 2004.09.04 05:05
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정찬희
      2004.09.06 04:35
      일단 델파이에서 에디터기능만 쓰길 원하신다고 하셨는데 그건 좀 힘들듯 싶구요.. 다른 좋은 에디터를 골...
    • 박미숙
    • 2004.09.04 02:11
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 파멸의슬픔
      2004.09.04 03:17
      Borland Database Engine(error $2501)이 에러는 간단히 말해서 BDE Memory 에러입니다... 가장 간단한 해...