Q&A

  • DLL내에서의 string억세스 문제
안녕하세요~



음..

제가 DLL을 만들어서 함수를 Call해서 사용을 하는 부분이 있습니다.

함수의 return value는 string입니다.



그런데 return Value를 줄때 result := inttostr(1); 이렇게 해서 주면 꼭 Access Violation 에러가 납니다.



result := '1'; 이러면 에러가 안나구요..

이 원인 찾는데도 며칠 걸렸어여~~~~~~~~~ 그냥 String을 직접 써주는것과 무슨 차이가 있는거 같은데 잘 모르겠어요..왜 이럴까요 ?

왜 ? 으흐흑~~왜 !!!!!!!!

3  COMMENTS
  • Profile
    최용일 2000.08.23 05:25
    안녕하세요. 최용일입니다.



    uses절에 ShareMem유닛을 추가하세요.



    예전에 책에서 읽었는데 DLL에서 문자열에 메모리를 할당하는데 문제가 생길 수 있다는



    군여~ DLL과 DLL을 사용하는 모든 유닛에 추가를 해주세요.



    잘되면 답변남겨주시구요. 저두 확실히 안 것은 아니니까요.



    ^^ 항상 즐코하세요.

    도와주세요..도사님.. wrote:

    > 안녕하세요~

    >

    > 음..

    > 제가 DLL을 만들어서 함수를 Call해서 사용을 하는 부분이 있습니다.

    > 함수의 return value는 string입니다.

    >

    > 그런데 return Value를 줄때 result := inttostr(1); 이렇게 해서 주면 꼭 Access Violation 에러가 납니다.

    >

    > result := '1'; 이러면 에러가 안나구요..

    > 이 원인 찾는데도 며칠 걸렸어여~~~~~~~~~ 그냥 String을 직접 써주는것과 무슨 차이가 있는거 같은데 잘 모르겠어요..왜 이럴까요 ?

    > 왜 ? 으흐흑~~왜 !!!!!!!!

  • Profile
    김진호 2000.08.23 10:34
    최용일 wrote:

    > 안녕하세요. 최용일입니다.

    >

    > uses절에 ShareMem유닛을 추가하세요.

    >

    > 예전에 책에서 읽었는데 DLL에서 문자열에 메모리를 할당하는데 문제가 생길 수 있다는

    >

    > 군여~ DLL과 DLL을 사용하는 모든 유닛에 추가를 해주세요.

    >

    > 잘되면 답변남겨주시구요. 저두 확실히 안 것은 아니니까요.

    >

    > ^^ 항상 즐코하세요.

    > 도와주세요..도사님.. wrote:

    > > 안녕하세요~

    > >

    > > 음..

    > > 제가 DLL을 만들어서 함수를 Call해서 사용을 하는 부분이 있습니다.

    > > 함수의 return value는 string입니다.

    > >

    > > 그런데 return Value를 줄때 result := inttostr(1); 이렇게 해서 주면 꼭 Access Violation 에러가 납니다.

    > >

    > > result := '1'; 이러면 에러가 안나구요..

    > > 이 원인 찾는데도 며칠 걸렸어여~~~~~~~~~ 그냥 String을 직접 써주는것과 무슨 차이가 있는거 같은데 잘 모르겠어요..왜 이럴까요 ?

    > > 왜 ? 으흐흑~~왜 !!!!!!!!



    제가 경험 해봤는데요..

    DLL에서는 문자열을 string변수 타입을 절때 넘져 받지 못합니다..

    혹 된다구 하더라두 종료 시점에서 꼭 어라가 뜨구 2~3번 실행하면 따운이 됩니다..

    어느 책엔가 본니깐 뭐더라? 델파이2 언리쉬드 인가여?

    그걸 보니깐 뭐라구 설명이 있는데 잘은 모르겠구..



    Pchar를 쓰시면 됩니다.

    ShareMem을 쓰면 되긴되는데 2000에서는 에라 납니다..

    글구 한가지 더..



    DLL은 델파이에서 지원하는 함수형 DLL과 윈도우에서 지원하는 DLL

    (뭐라구 하는데 기역이 없음..)

    2가지 형태가 있자나여..



    윈도우에서 지원하는 DLL은 상관없으나

    함수형 DLL는 절때 변수(전역)를 선언해서는 않됩니다..



    저두 그것땜에 무지하게 애(간난애기 아님..) 먹었습니다..



    그럼 즐코..





  • Profile
    도와주세요..도사님.. 2000.08.23 22:43
    김진호,최용일님께 감사드립니다.

    두분 말씀대로 하니까 모두 되네요..



    원인을 알아보니깐...String 형으로 선언되면..정말로 Memory Free하는데 문제가 생기더군요..

    간단하게 그 String을 shortString으로(255byte fix)로 선언을 하니깐 문제 없이 되더군요..



    감사합니다.



    복 많이 받으세요~~