读书人

高分求解:delphi怎么使用C写的sdk?

发布时间: 2012-02-08 19:52:21 作者: rapoo

高分求解:delphi如何使用C写的sdk???
第一次在DELPHI下使用第三方控件,请高手指教:delphi如何使用C写的sdk???最好说下思路和经验,有相关资料介绍最好。我这两天在恶补C知识,因为第一次接触SDK,不知道如何开始,多谢指教~!!!
我QQ:270274971 E-MAIL:lj-vod@163.xom 希望能帮忙的朋友交个朋友,有机会多交流下,我武汉的,来武汉的朋友我请吃热干面和鸭脖子~~~~


[解决办法]
用写写好并测试确定正确后给delphi调用就行了。需要编译出obj
可以上老陈的网站www.138soft.com上看demo。比较简单的。
不要在delphi里面写C的代码。
[解决办法]
用vc或是bcb ,不是都有向导吗,其他代码基本上一样,就是要写输出函数而已。网上找个dll的写发就知道了,不过采用不能语言有一点点区别。
[解决办法]
我用过的很多SDK都是提供DLL库的,但用的是C++的头文件,如果要在Delphi中用的话,不单是要重新定义DLL函数引入,还要重定义各种数据结构。
不知LZ是不是这样的情况,这不是用C封装DLL能解决的,除非提供的SDK是CPP源文件。
[解决办法]
是要把*.H重新编译成*.PAS吗?

恐怕你得把.H文件按Pascal语法重写一遍
[解决办法]
我现在知道怎么编写DLL和调用DLL了,可是情况和 bomdy(昏昏欲睡的虫子) 说的样,现在我不知道怎么样调用*.H这样的头文件,是要把*.H重新编译成*.PAS吗?

============================================================

Delphi中的申明需要自己根据C中的头文件进行改写。
[解决办法]
用个delphi to C的软件处理一下,我记得有这样的工具,只是估计部分需要自己做个简单的修改
[解决办法]
呵呵,用headconv转的,没校验过

unit 3YX_TOPACK_RTD;
{**************************************************************************}
{ }
{ This C DLL header file first (automatic) conversion generated by: }
{ HeadConv 4.0 (c) 2000 by Bob Swart (aka Dr.Bob - www.drbob42.com) }
{ Final Delphi-Jedi (Darth) command-line units edition }
{ }
{ Generated Date: 2007/05/24 }
{ Generated Time: 9:43:28 }
{ }
{**************************************************************************}

interface
uses
{$IFDEF WIN32}
Windows;
{$ELSE}
Wintypes, WinProcs;
{$ENDIF}


{+//************************************************ }
{-Copyright (C), 2002-2005, Power Infomation Tech. Co., Ltd. }
{-File name: tpkRtd.h }
{-Author:Jian Jun Version: 1.0 Date: 2004-12-20 }
{-Description: This header File declares all the SDK display interfaces. }
{-And this file must be included when tpkRtd.dll or }
{-tpkRtd.lib invoked. }
{-Function List: }
{-1.Initialization function: tpkInitSystem }
{-2.Deconstructor: tpkFreeSystem }

{=************************************************ }
{$IFNDEF _3YX_TOPACK_RTD_H_}
{$DEFINE _3YX_TOPACK_RTD_H_}

{$INCLUDE <Windows.h> }
{$INCLUDE "tpkRtdType.h "}

{+//***********************************************/ }
const
TPKRTDAPI = __stdcall;

{+//***********************************************/ }
{+//**********General Functiions*******************/ }
{+//***********************************************/ }

function tpkInitSystem(nMode: SmallInt): SmallInt cdecl {$IFDEF WIN32} stdcall {$ENDIF};

function tpkFreeSystem: SmallInt cdecl {$IFDEF WIN32} stdcall {$ENDIF};

function tpkInitBoard(nBoardNum: SmallInt;
nVideoMode: SmallInt;
unFuncMode: Word): SmallInt cdecl {$IFDEF WIN32} stdcall {$ENDIF};



function tpkFreeBoard(nBoardNum: SmallInt): SmallInt cdecl {$IFDEF WIN32} stdcall {$ENDIF};


function tpkInitialEvent(nBoardNum: SmallInt;
iEventType: Integer;
strEvent: PChar): Bool cdecl {$IFDEF WIN32} stdcall {$ENDIF};

function tpkCloseEvent(nBoardNum: SmallInt;
strEvent: PChar): Bool cdecl {$IFDEF WIN32} stdcall {$ENDIF};


function tpkDiagnoses(nBoardNum: SmallInt;
szFileName: PChar): SmallInt cdecl {$IFDEF WIN32} stdcall {$ENDIF};

function tpkPrintErr(lpszErrMsg: PChar;
dwMaxLen: LongInt): SmallInt cdecl {$IFDEF WIN32} stdcall {$ENDIF};


function tpkGetParams(nBoardNum: SmallInt;
uiParamNum: DWord;
var pParamVal: LongInt): SmallInt cdecl {$IFDEF WIN32} stdcall

{$ENDIF};

function tpkSetParams(nBoardNum: SmallInt;
uiParamNum: DWord;
uiParamVal: DWord): SmallInt cdecl {$IFDEF WIN32} stdcall {$ENDIF};


function tpkGetVideoPos(nBoardNum: SmallInt;
var lpRect: RECT): SmallInt cdecl {$IFDEF WIN32} stdcall {$ENDIF};

function tpkSetVideoPos(nBoardNum: SmallInt;
var lpRect: RECT): SmallInt cdecl {$IFDEF WIN32} stdcall {$ENDIF};


function tpkGetVideoRect(nBoardNum: SmallInt;
var lpRect: RECT): SmallInt cdecl {$IFDEF WIN32} stdcall {$ENDIF};

function tpkSetVideoRect(nBoardNum: SmallInt;
var lpRect: RECT): SmallInt cdecl {$IFDEF WIN32} stdcall {$ENDIF};
{+//***********************************************/ }
{+//**********General Functiions End***************/ }
{+//***********************************************/ }

{+//***********************************************/ }
{+//**********File Oriented Functiions*************/ }
{+//***********************************************/ }

function tpkOpen(nBoardNum: SmallInt;
var strFileName: CCH;
uiOffsetHigh: DWord;
uiOffsetLow: DWord): SmallInt cdecl {$IFDEF WIN32} stdcall {$ENDIF};

function tpkOpen2Frame(nBoardNum: SmallInt;
var strFileName: CCH;
iMarkIn: Integer): SmallInt cdecl {$IFDEF WIN32} stdcall {$ENDIF};

function tpkOpen2Time(nBoardNum: SmallInt;
var strFileName: CCH;
var pMarkInTime: DWord): SmallInt cdecl {$IFDEF WIN32} stdcall

{$ENDIF};

function tpkOpenIFO2Frame(nBoardNum: SmallInt;
var strFileName: CCH;
iChapter: Integer;
var pMarkIn: DWord): SmallInt cdecl {$IFDEF WIN32} stdcall

{$ENDIF};

function tpkOpenIFO2Time(nBoardNum: SmallInt;
var strFileName: CCH;
iChapter: Integer;
var pMarkInTime: DWord): SmallInt cdecl {$IFDEF WIN32} stdcall

{$ENDIF};

function tpkClose(nBoardNum: SmallInt): SmallInt cdecl {$IFDEF WIN32} stdcall {$ENDIF};
{+//***********************************************/ }
{+//**********File Oriented Functiions End*********/ }
{+//***********************************************/ }

{+//***********************************************/ }
{+//**********Rediffusion Functions****************/ }
{+//***********************************************/ }

function tpkRediffusion(nBoardNum: SmallInt): SmallInt cdecl {$IFDEF WIN32} stdcall



{$ENDIF};

[解决办法]
这个应该做不到,delphi没有这个,他表示的是位数,
unsigned charfGetInfo:3;
unsigned charfSecondField:1;
unsigned charfGetPTS:3;
unsigned char fTimecode:1;//时码是否正常
这几个是强行限制大小,再这里4个加起来才1byte大小,fGetInfo用了3bit,fSecondField用了1bit,....
你可能需要定义成一个变量然后进行位操作赋值或者读取了。这种东西不少通信中会定义这样的协议。
[解决办法]
关于C位域操作可参见:
http://community.csdn.net/Expert/topic/5599/5599850.xml?temp=2.987307E-02

读书人网 >.NET

热点推荐