大胖的部落格

Just a note

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks
dll文件:
#include "C:\Tcl\include\tcl.h"

#pragma comment(lib,
"C:\\Tcl\\lib\\tcl84")


//C函数
int MyFunc(int i)
{
    
return i*10;
}



//在这个函数里调用我们自己的C函数
int TclCmdProc(ClientData clientData, Tcl_Interp *interp, int objc, char * CONST * objv)
{
    
//获得参数
    int iArg = 0;
    Tcl_GetInt(interp, objv[
1], &iArg);

    
//将参数传入C函数
    int iResult = MyFunc(iArg);

    
//将C函数的返回结果传回
    Tcl_SetObjResult(interp,Tcl_NewIntObj(iResult));

    
return TCL_OK;
}


//导出该函数,函数名必须是dll名_Init,dll名只能第一个字母大写!
   //需要extern "C" 关键字
extern "C"  __declspec(dllexport) int Testtcl_Init(Tcl_Interp *interp)
{
    
//将函数与命令"t10"绑定
    Tcl_CreateCommand(interp,"t10",(Tcl_CmdProc*)TclCmdProc,(ClientData)NULL,(Tcl_CmdDeleteProc *) NULL);

    
return TCL_OK;
}




TCL脚本文件:
#导入dll文件
load ./TestTcl

#主函数,第一个参数是文件名,第二个参数是要处理的值
proc main {logfile num} {
#打开文件
set logfilep  [open $logfile a+]; 
#调用t10命令,将要处理的值作为第一个参数传入
set rtn [t10 $num
#将返回的结果写入文件
puts $logfilep "$rtn";
#关闭文件
close $logfilep;
}


main [lindex 
$argv 0] [lindex $argv 1


执行该脚本时,需要传入两个参数,第一个是保存结果的文件名,第二个是要调用c函数处理的值。

 

DLL中一定要导出初始化函数,该函数命名规则为"dll名_Init",并且dll名只允许第一个字母大写,导出时需要extern "C"关键字。

posted on 2009-05-14 14:24 大胖 阅读(2407) 评论(0)  编辑 收藏 引用 所属分类: Others

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理