에 VC 코드 변환이 필요, 여기에 DLL 헤드 파일의 코드는 암호. 어떻게 그 코드를 델파이로 변환 할 수 있습니까? 고맙습니다!내가 내 델파이 코드에서 DLL 파일을 호출해야합니다 델파이
답변
발췌문 관리되지 않는 델파이 코드 (테스트하지,하지만 컴파일을위한, 아주 나를 위해 매우 도움이되었다과에 따라 제안 변경 댓글) : 델파이 코드에서
interface
type
TBookTime = packed record
day : byte; // unsigned 8-bit
month : byte;
year : word; // unsigned 16-bit
end;
TBookData = packed record
encrypt : byte;
bkTime : TBookTime;
PageCount : LongWord; // unsigned 32-bit
end;
TBookDataPtr = ^TBookData;
function UpdateBooks(
pBookID : PChar;
cBookTypeWord : byte;
pBookData : TBookDataPtr;
nBookDataCounter : integer
) : integer; stdcall; external 'dll_file_name.dll' name 'UpdateBooks';
implementation
// ...
end;
간단한 전화 UpdateBooks(...)
.
는 업데이트 : 코드 주석에 대한 감사를 변경! 샘플 통화
다음입니다 조각 ... 모든 조각에 대한
공통 함수와 상수 :
// --- Test procedure in Delphi style -----------------------------------------
procedure TestBookUpdate_DelphiStyle;
var
bookArray : array of TBookData;
iBookNumber : integer;
begin
SetLength(bookArray, BOOK_DATA_COUNT);
try
for iBookNumber := Low(bookArray) to High(bookArray) do begin
FillTestBookData(@(bookArray[iBookNumber]), iBookNumber);
end;
UpdateBooks(
PChar(BOOK_ID), ord(BOOK_TYPE_WORD),
@(bookArray[Low(bookArray)]), BOOK_DATA_COUNT
);
finally
SetLength(bookArray, 0); // no explicit requirement to include in code
end;
end;
보너스 : 일반적인 델파이 스타일
// --- Test data fill utility and constants -----------------------------------
const
BOOK_ID = 'Test Book ID';
BOOK_TYPE_WORD = 'T';
BOOK_DATA_COUNT = 5;
procedure FillTestBookData(pBookData : TBookDataPtr; iTestNum : integer);
begin
if(pBookData = nil) then exit;
pBookData^.encrypt := iTestNum;
pBookData^.bkTime.day := iTestNum;
pBookData^.bkTime.month := iTestNum;
pBookData^.bkTime.year := 2000 + iTestNum;
pBookData^.PageCount := iTestNum;
end;
호출 기능 동일한 테스트 C 스타일 및 파스칼 스타일의 전화 :
// --- Test procedure in Old Delphi (plain Pascal) style ----------------------
type
TBookDataOldArray = array[0..0] of TBookData;
TBookDataOldArrayPtr = ^TBookDataOldArray;
// Store range checking compiler option state
{$IFOPT R+}
{$DEFINE RANGE_CHECK_ON}
{$ENDIF}
procedure TestBookUpdate_OldDelphiStyle;
var
bookArrayPtr : TBookDataOldArrayPtr;
iBookNumber : integer;
begin
GetMem(bookArrayPtr, BOOK_DATA_COUNT*sizeof(TBookData));
try
// Disable range checking compiler option
{$R-}
for iBookNumber := 0 to BOOK_DATA_COUNT - 1 do begin
FillTestBookData(@(bookArrayPtr^[iBookNumber]), iBookNumber);
end;
// Restore range checking compiler option if turned on before disabling
{$IFDEF RANGE_CHECK_ON}{$R+}{$ENDIF}
UpdateBooks(
PChar(BOOK_ID), ord(BOOK_TYPE_WORD), TBookDataPtr(bookArrayPtr), BOOK_DATA_COUNT
);
finally
FreeMem(bookArrayPtr);
end;
end;
// --- Test procedure in C style ---------------------------------------------
procedure TestBookUpdate_CStyle;
var
bookArrayPtr : TBookDataPtr;
curBookPtr : TBookDataPtr;
curBookNumber : integer;
begin
bookArrayPtr := AllocMem(BOOK_DATA_COUNT * sizeof(TBookData));
try
curBookNumber := 0;
curBookPtr := bookArrayPtr;
while(curBookNumber < BOOK_DATA_COUNT) do begin
FillTestBookData(curBookPtr, curBookNumber);
inc(curBookNumber);
inc(curBookPtr, 1);
// Another pointer increment solution is :
// curBookPtr := PChar(curBookPtr) + sizeof(TBookData);
end;
UpdateBooks(PChar(BOOK_ID), ord(BOOK_TYPE_WORD), bookArrayPtr, BOOK_DATA_COUNT);
finally
FreeMem(bookArrayPtr);
end;
end;
param "pBookdata"는 둘 이상의 TBookData 구조체를 포함 할 수 있으며, "nBookDataCounter"는 TBookData 구조체의 수를 가리 킵니다. – Leo
레오, ThinkJet의 번역에 반드시 필연적 인 문제는 아니지만 기능 호출이 약간 이상하게 보일 것입니다. 당신은 배열을 가지지 만, 첫 번째 요소를 함수에 전달합니다 :'UpdateBooks (..., BookData [0], Length (BookData))'. ThinkJet, C++의 포인터 매개 변수를 Delphi의 포인터 매개 변수로 변환하는 것이 좋습니다. –
레코드 정렬? 아마 포장해야합니다. 또한 나는 그 모든 것에 대해 penddata를 제외한 모든 CONST를 삭제하는 것이 좋다고 생각합니다. 그 이유는 역 참조 (*)가 삭제 되었기 때문입니다. –
사용 h2pas! Freepascal 도구이지만 Delphi 호환 코드를 생성해야합니다.
어제 제 첫 C 헤더 변환이 끝났습니다. TeamB 회원 루디 Velthuis에서 기사와 도구는 특별히
- 1. 헌장 기능은 델파이 코드에서 델파이
- 2. 내가 타사가 델파이
- 3. 는 델파이 - DLL
- 4. LIBRTMP 델파이 : DLL 매핑
- 5. 델파이 DLL 호출
- 6. 델파이 2010 : 델파이
- 7. 델파이 :
- 8. 내가 델파이에서 작성하려는 델파이
- 9. 델파이 -
- 10. 델파이 2009와 델파이 2010
- 11. 델파이 :
- 12. 델파이 2006와 함께 델파이 2010
- 13. 델파이 7의 dll 함수에서 부울 매개 변수
- 14. 내 응용 프로그램에서 2 DLL (OCX)를 사용하려고 시도하는 델파이
- 15. 델파이 - DLL 형식 - 힌트가 표시되지 않음
- 16. 삽입 된 dll 코드를 델파이 * .dll 플러그인으로 사용하십시오. TForm
- 17. 델파이 4에서 .net을 델파이 4의 .net을위한 Decompiling.
- 18. 델파이 - TPaintBox -
- 19. 델파이 - TOpenDialog
- 20. 델파이 자바, 비누 델파이, SMS를 보내십시오
- 21. 델파이 : 프로그래밍
- 22. MQ 델파이
- 23. C#에서 델파이 DLL - 매개 변수로 var 배열
- 24. 델파이 - 트리보기
- 25. 델파이 - 엑셀
- 26. 델파이 - TWebBrowser은
- 27. C 델파이
- 28. DLL의 델파이 finalizalization 코드
- 29. 내 델파이 프로젝트에서 SVN을 무시하도록 구성해야합니까?
- 30. 델파이 문자열을 "const 버퍼"
어떤 델파이 버전입니까? – ThinkJet
sizeof (_BookTime) 및 sizeof (_stBookData) 란 무엇입니까? 레코드가 기계 단어 경계에 맞춰 지거나 정렬됩니까? – ThinkJet
레오, 어느 부분 번역에 문제가 있습니까? 이 특정 * 코드를 번역하도록 요청하면이 질문이 "너무 현지화 된"위험에 빠질 수 있습니다. 일반적인 전세계 잠재 고객은이 특정 코드를 어떻게 번역해야할지 신경 쓰지 않습니다. 어쩌면 당신은 "구조체"가 무엇을 의미하는지, 델파이 타입 인 "unsigned char"가 무엇인지, 매크로가 무엇을하는지, 또는 모든 "const"수정자가 가지는 영향에 대해 궁금 할 것입니다. 이 코드뿐만 아니라 다른 * C++ 코드에도 쉽게 적용될 수있는 질문을하십시오. –