1. 程式人生 > >VC中呼叫perl程式

VC中呼叫perl程式

改文件轉載於:http://blog.sina.com.cn/s/blog_477759e70100cx82.html

今日,改寫一些perl生成順序遞增數的程式碼。為滿足測試,需要不斷執行以生成新的一百萬個隨機數。由於起始數不同,每次都需要在程式碼裡的修改再執行(或敲命令的傳遞)。若只是我使用,也不會覺得太麻煩。但,隊友使用起來就不太方便。還是用VC做個介面,在C/C++程式碼裡呼叫perl指令碼,做成笨蛋按鈕式的,呵呵。。。

    說真的,還真不知如何用C/C++呼叫perl呢?(當然這裡的C/C++,俺是說用VS環境裡的)。

   網上搜索一下,CSDN裡花3個積分下了一份簡便的說明文件(作者是誰忘了,別怪我)。操作步驟如下:

1.VS裡的工程設定:

工具->選項->專案和解決方案->VC++目錄 ,在“顯示以下內容的目錄(S):”下拉框中選擇“包括檔案”, 新增*\bin, *\lib\core, *表示perl的安裝路徑。

工具->選項->專案和解決方案->VC++目錄 ,在“顯示以下內容的目錄(S):”下拉框中選擇“庫檔案”,新增*\lib\core, *表示perl的安裝路徑。

把perl58.lib加入到工程中,專案->“專案”屬性->配置屬性->連結器->命令列, 在附加選項里加上perl56.lib(因為俺用的perl版本是5.6的)

2.在專案的程式碼裡新增標頭檔案

#include "EXTERN.h"     //引用外部的標頭檔案
#include "perl.h"       //perl標頭檔案

3. 專案程式程式碼

int _tmain(int argc, _TCHAR* argv[])
{
// char *embedding[] = {"","C:\\data.pl","E:\\dumptobin"};//perl指令碼和引數,第一個為空,沒有空格,
                                                        //第二個為指令碼檔案,第三個為指令碼的輸入引數
    char *embedding[] = {"","C:\\perl2\\CreateNumber.pl",""}; //俺的perl指令碼的真實路徑,沒有輸入引數

 static PerlInterpreter *my_perl;//定義一個perl直譯器

 my_perl = perl_alloc();//為直譯器分配資源

 perl_construct( my_perl );//建立一個直譯器

 perl_parse(my_perl, NULL, 3, embedding, NULL);//perl解析
   //perl_parse函式原型是:
   //PERL_CALLCONV int perl_parse(PerlInterpreter* interp, XSINIT_t xsinit, int argc, char** argv, char** env)

 perl_run(my_perl);//執行

// int str = SvIV(perl_get_sv("lastValue", FALSE));//把perl指令碼中的變數lastValue傳給C中的變數str,無效的語句
// printf("返回值為%d.\n", str);

    perl_destruct(my_perl);//析構直譯器

 perl_free(my_perl);//釋放直譯器

 return 0;
}

大體上就這些了。其它的用VS做介面框,各人需要自己去弄。(當然你得先安裝了Perl)。

當然,這個仍是一個VC程式硬繫結一個perl指令碼,若要實現程式介面(上面暫是控制檯)和執行時刻選擇perl指令碼,嘿嘿,那就通過讀一個配置檔案以傳遞指令碼名稱吧。

相關推薦

VC呼叫perl程式

改文件轉載於:http://blog.sina.com.cn/s/blog_477759e70100cx82.html 今日,改寫一些perl生成順序遞增數的程式碼。為滿足測試,需要不斷執行以生成新的一百萬個隨機數。由於起始數不同,每次都需要在程式碼裡的修改再執行(或敲

MATLAB呼叫.C程式

需要把 .c  變成 MATLAB 可以識別的程式碼 在MATLAB中進入 .c 檔案所在的當前目錄,然後  mex  BP_General_C.c 。該路徑下生成BP_General_C.mexa64檔案,即為MATLAB可以呼叫的檔案。 mex 

vs2008呼叫matlab3013a程式配置方法

1.在vs2008中建立一個win32控制檯應用程式,; 2.在vs2008中的 “工具”——>“選項”——>"專案與解決方案"——>"VC++目錄"——>右上角選擇"包含檔案",在下面   包含:D:\Program Files\MATLAB\R2013a

VC呼叫WebBrowser簡單的實現過程(圖解過程)

首先我們開啟VC開發環境,如下圖 然後我們開始新建一個工程,點選"檔案"選單的"新建"項 然後我們在“工程”選擇卡中選擇“MFC AppWizard(exe)”項,並且選擇設定好工程存放的位置和工程名稱 然後點選“確定”按鈕會彈出“MFC 應用程式嚮導”,根據嚮導提示建

總結一下在VC呼叫COM元件的方法+++VC呼叫遠端COM+元件

總結一下在VC中呼叫COM元件的方法 準備及條件: COM伺服器為程序內伺服器,DLL名為simpCOM.dll,該元件只有一個介面IFoo,該介面只有一個方法HRESULT SayHello(void) 在SDK中呼叫 ====================

QT呼叫外部程式的方法 QProcess類

QT4對於介面程式設計無疑是一個很方便的工具。但是由於它介面開發專項特性,可能導致了某些方面的不足(到目前為止暫時沒有使用到這類複雜功能,所以只能是推測)。這樣當整個程式需要某些功能時,就需要外部模組的支援。為了能夠與外部程式相互聯絡,Qt4提供了強大的外部程式呼叫類。先說說

VC++的MFC程式的執行過程

程式的誕生 #Application Object產生,內存於是獲得配置,初值亦設立完成。 #AfxWinMain執行AfxWinInit,後者又呼叫AfxInitThread,把訊息佇列儘量加大。 #AfxWinMain執行InitApplication。這是CwinApp

使用Jpype在python呼叫Java程式

在專案中遇到了這樣的需求,在這裡記錄一下,首先要下載python的jpype庫。最簡單的就是用法就像下面一樣: jpype.startJVM(jpype.getDefaultJVMPath()) //呼叫java內建庫函式方法 jpype.java.lang.

(原創)oracle呼叫JAVA程式

1.寫一個簡單的測試應用類 //注意此處有包名稱 package com.test; public class OJ {  /**  * <pre> 描述 </pre>  * @param @param args      */ public sta

關於在bcb呼叫外部程式的用法

1:用system("")執行(簡單,像在CMD命令列一樣) 2:用WinExec()執行 3:用CreateProcess執行 4:用ShellExecute執行. 1)  WinExec() 函式原型: UINT WinExec(LPCSTR lpCmdLine,UINT uCmdShow);

QT呼叫外部程式的方法

    我做的那個小軟體的圖形介面是基於QT3.2的,在主介面的命令列編輯框輸入命令以後要執行別人已經寫好的可執行檔案。這些可執行檔案執行的時間比較長,在終端上執行時會顯示一些執行的資訊,最後才顯示執行結果。我的介面上有一個文字框,我想把它們在後臺執行過程中的資訊不斷新增到文字框中,相當於實時顯示吧,不過要求

vc呼叫Com元件的方法詳解

需求: 1.建立myCom.dll,該COM只有一個元件,兩個介面:    IGetRes--方法Hello(),    IGetResEx--方法HelloEx() 2.在工程中匯入元件或型別庫  #import "元件所在目錄myCom.dll" no_namespa

win32程式呼叫控制檯程式

#include <Windows.h>#include <cstdio>#define ErrorShow(Msg) MessageBox(NULL,Msg,L"ErrorShow",MB_OK)void OnKeyProc(KEY_EVENT_RE

如何從 VC WebBrowser 應用程式呼叫指令碼函式

為了呼叫指令碼函式存在的網頁上,您必須使用自動化 ; 換句話說,IDispatch。 使用以下步驟來呼叫指令碼函式從 Visual C++ 應用程式的網頁上存在的: 獲取在 HTML 文件的 IDispatch。 呼叫利用 IDispatch:: GetIDsOfName

VC如何呼叫其他的可執行程式

Q: 如何開啟一個應用程式 ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW ); 或 ShellExecute(this->m_hWnd,"open","notepad.exe","c:\\MyLog.log","",SW_SH

在python程式呼叫另一個py檔案

在同一個資料夾下 呼叫函式: A.py檔案:     def add(x,y): print('和為:%d'%(x+y)) B.py檔案:     import A A.add

Oracle基礎:3: 程式呼叫sqlplus的方式

通過sqlplus可以連線資料庫根據使用者許可權進行資料或者設定操作,但是需要互動操作並返回結果,這篇文章介紹一下如何在程式中使用sqlplus。 環境準備 使用Oracle的精簡版建立docker方式的demo環境,詳細可參看: https://blog.csdn

Qt的利用QProcess呼叫外部程式

今天工作中要Qt呼叫記事本來開啟一個檔案。上網查了一下用QProcess用法,一般的QProcess開啟外部程式.exe檔案,下面總結一下,挺簡單的。 int QProcess::execute(const QString &program, const&n

14,matlab如何檢視程式呼叫的函式

很不幸今天弄懂了matlab中的class,但是這個和執行的時候還是出錯,然後就突然有一種想法,有沒有一種可以列出來各個函式的呼叫的順序之類的圖形,方便檢視類中都定義了那些函式,以及主函式呼叫的時候是怎麼個順序,然後就看到了 原文連結: Matlab如何檢視主程式所呼叫的所

golang使用cgo呼叫c++程式

1 背景 這兩天在考慮使用golang搭建一個http服務,呼叫別人的linux sdk。由於linux sdk是用c寫的,直接使用cgo呼叫c是很方便的,但是個人想使用c++來呼叫c的函式,封裝成c++語法,c++可以使用一些庫,對於開發是比較方便的,所以就得考慮使用cgo呼叫c+