论坛首页 编程语言技术论坛

请教一个ruby调用dll的问题

浏览 5952 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-07  
网上关于ruby调用Win32API的资料不多,现在有一个ICTCLAS.dll文件,相关接口如下
bool ICTCLAS_Init(const char * sInitDirPath=NULL);
bool ICTCLAS_ParagraphProcess(const char *sParagraph,char *sResult);
bool ICTCLAS_Exit();


下面是一段c的实现
#include "ICTCLAS.h"
#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[])
{
	//Sample1: Sentence or paragraph lexical analysis with only one result
        char sSentence[2000],sSentenceResult[5000];
	if(!ICTCLAS_Init())	
	{
	   printf("Init fails\n");
	   return -1;
	}
	printf("Input sentence now('q' to quit)!\n");
	scanf("%s",sSentence);
	while(_stricmp(sSentence,"q")!=0)
	{
		ICTCLAS_ParagraphProcess(sSentence,sSentenceResult);
		printf("%s\nInput string now('q' to quit)!\n",sSentenceResult);
		scanf("%s",sSentence);
	}
        ICTCLAS_Exit();
	return 0;
}


请问用ruby如何实现
大致结构是
require 'Win32API'
a = Win32API.new('dll.dll', 'getSome', paramsType, returnValueType)
a.call(params)
但是尝试失败,请指教,谢谢.
   发表时间:2007-03-07  
间接的用LoadLibrary这个函数试试。
0 请登录后投票
   发表时间:2007-03-07  
public synchronized native boolean init(int i, int j);
public synchronized native String paragraphProcess(String sParagraph);
public synchronized native boolean fileProcess(String source, String target);


require 'Win32API'
a = Win32API.new('ICTCLAS', 'Init',['i','i'], 'v')
a.call(0,1)
b = Win32API.new('ICTCLAS','ParagraphProcess','P','P')
puts b.call("你太有才了")
c = Win32API.new('ICTCLAS','FileProcess',['P','P'],'v')
puts c.call("in.txt","out.txt")


现在就是
b = Win32API.new('ICTCLAS','ParagraphProcess','P','P')
puts b.call("你太有才了")

这个接口调用失败,请问String类型的参数我是指定为'P'吗?
1 请登录后投票
   发表时间:2007-03-08  
知道了
b = Win32API.new('ICTCLAS','ParagraphProcess','PP','v')
res = '\0'*256   
b.call("你太有才了",res)
puts res 
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics