2013-05-12 2 views
-5

여러 이름으로 같은 DLL 기능을 내보내기 : 대부분의 경우같이, 내 DLL에서 일부 기능을 만들었습니다

export 
    DoThis, 
    DoThis name 'DoThat'; 

이 "이름 바꾸기 :

procedure DoThis(A: PChar): Boolean; stdcall; 
begin 
f := TFileStreamCreate(A, fmCreate); 
f.read() 
f.free; 
end; 

는 내가이 이름 아래 수출 "작품. 그러나 적어도 하나의 경우에는 "DoThat"이라는 이름을 바꾼 함수가 실제 파일의 데이터를 읽지 않고 무효화 된 데이터를 읽습니다. 같은 파일에서 DoThis를 호출하면 멋지게 작동합니다.

할 일이 "이름 바꾸기"가 아닌 합법적 인 것입니다 나는 모든 메모리가

그래서 질문은 (일반 콘솔 응용 프로그램에 코드를 변환) FastMM4가 덕분에 누수 제거?

합법적 인 경우 콘솔 앱으로 변경하지 않고 FastMM4로 DLL을 디버깅 할 수 있습니까?

+1

당신이 설명하는 것은 증명하지 않으면 일어날 수없는 일입니다. 가짜 코드를 붙여 넣지 마십시오. 완전한 프로그램 인 실제 프로그램을 붙여 넣으십시오. 가짜 코드는 모든 사람의 시간 낭비입니다. –

+0

200kB 이상의 코드는 여기에 붙여 넣을 수 없습니다. 나는이 문제에 대한 해결책을 찾고있는 것이 아니라 단지 2 가지 질문에 대한 답을 찾고있다. – Tom

+0

게시글은 코드의 축소판입니다. 당신은 20-30 라인 만 있으면됩니다. 그 컷 다운 재현을 만드는 행위는 그 문제가 다른 곳에 있다고 당신에게 확신시킬 것입니다. –

답변

3

질문에 설명하는 내용이 현실과 일치하지 않습니다.

"이름을 바꾸는 것"은 법적으로 할 수있는 것이 아닙니까?

동일한 기능을 여러 이름으로 내보내는 것은 완전히 합법적입니다. 당신이 설명하는 문제는 일어나지 않습니다.

콘솔 앱으로 변경하지 않고도 FastMM4로 DLL을 디버깅 할 수 있습니까?

예. 가능합니다. 매개 변수 실행 대화 상자에서 호스트 응용 프로그램을 지정하면 DLL을 디버깅 할 수 있습니다.

+0

해답을 가져 주셔서 감사합니다. 두 번째는 나를 위해 작동하지 않습니다 - 메모리 누수가있는 일반적인 FastMM 대화 상자가 나타나지 않습니다. 그러나 나는 그것이 분명히 가능하다는 것을 알기 때문에 더 깊이 파헤 칠 것이다. 감사합니다, 그 정보는 내가 필요로하는 전부입니다! – Tom

+1

FastMM 누출 보고서가 DLL에서 표시됩니다. –