本文目錄一覽:
如何實現 js 和 c++ 的互相調用
腳本執行的基礎是WEB控制項,
那麼C++在WINDOWS下運行可以裝入WEB控制項實現腳本調用。
下面是一段引用某位博主的代碼可以參考一下。
// vcJscript.cpp : 定義控制台應用程序的入口點。
//
#include “stdafx.h”
#import “C:/windows/system32/msscript.ocx” // msscript.ocx
using namespace MSScriptControl;
#include fstream
#include string
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr = CoInitialize(NULL); //使用一個變數初始化COM設置,單線程運行
IScriptControlPtr pScriptControl(__uuidof(ScriptControl)); //初始化腳本控制項
pScriptControl-Language = “JavaScript”; //設置語言
pScriptControl-AllowUI = TRUE;//設置顯示
fstream file;//文件流用於讀出JS代碼
file.open( “test.js” );
string strFileContent, strTemp;
char szTemp[1024]=””;
do
{
file.read(szTemp, 1024);
strFileContent.append( szTemp );//拼接JS文件
memset( szTemp, 0, 1024 );
}
while ( !file.fail() );
file.close();
pScriptControl-AddCode(strFileContent.c_str());//向控制項加入代碼
VARIANT A = pScriptControl-Eval(“main(4);”); //獲取返回值
int iRet = A.intVal;
return 0;
}
如何在IOS平台上使用js直接調用OC方法
在Cocos2d-JS v3.0 RC2中,與Android上js調用Java一樣,Cocos2d-JS也提供了在iOS和Mac上js直接調用Objective-C的方法,示例代碼如下:
1 var ojb = jsb.reflection.callStaticMethod(className, methodNmae, arg1, arg2, …..);
在 jsb.reflection.callStaticMethod 方法中,我們通過傳入OC的類名,方法名,參數就可以直接調用OC的靜態方法,並且可以獲得OC方法的返回值。
類
•參數中的類名,只需要傳入OC中的類名即可,與Java不同,類名並不需要路徑。比如你在工程底下新建一個類 NativeOcClass ,只要你將他引入工程,那麼他的類名就是 NativeOcClass ,你並不需要傳入它的路徑。
1 import Foundation/Foundation.h @interface NativeOcClass : NSObject +( BOOL )callNativeUIWithTitle:(NSString *) title andContent:(NSString *)content; @end
方法
•js到OC的反射僅支持OC中類的靜態方法。
•方法名比較要需要注意,我們需要傳入完整的方法名,特別是當某個方法帶有參數的時候,你需要將他的:也帶上。根據上面的例子。此時的方法名字是callNativeUIWithTitle:andContent:,不要漏掉了他們之間的:。
•如果是沒有參數的函數,那麼他就不需要:,如下代碼,他的方法名是 callNativeWithReturnString ,由於沒有參數,他不需要:,跟OC的method寫法一致。
1 +(NSString *)callNativeWithReturnString;
使用示例
•下面的示例代碼將調用上面 NativeOcClass 的方法,在js層我們只需要這樣調用:
1234 var ret = jsb.reflection.callStaticMethod( “NativeOcClass” , “callNativeUIWithTitle:andContent:” , “cocos2d-js” , “Yes! you call a Native UI from Reflection” );
•這裡是這個方法在OC的實現,可以看到是彈出一個native的對話框。並把 title 和 content 設置成你傳入的參數,並返回一個boolean類型的返回值。
123 +( BOOL )callNativeUIWithTitle:(NSString *) title andContent:(NSString *)content{ UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title message:content delegate:self cancelButtonTitle:@ “Cancel” otherButtonTitles:@ “OK” , nil]; [alertView show]; return true ; }
•此時,你就可以在 ret 中接受到從OC傳回的返回值(true)了。
注意
在OC的實現中,如果方法的參數需要使用float、int、bool的,請使用如下類型進行轉換:
•float,int 請使用NSNumber類型
•bool請使用BOOL類型。
•例如下面代碼,我們傳入2個浮點數,然後計算他們的合併返回,我們使用NSNumber而不是int、float去作為參數類型。
1 +( float ) addTwoNumber:(NSNumber *)num1 and:(NSNumber *)num2{ float result = [num1 floatValue]+[num2 floatValue]; return result;}
•目前參數和返回值支持 int, float, bool, string,其餘的類型暫時不支持。
js如何調用c語言寫的api
包含api的.h文件,然後直接調用就可以了,比如winsock.h,可以調用recv等函數,也可以在函數前面加::
答案補充
HWND hWnd = ::FindWindow(sClassName, sWindowName);//傳入類明到sClassName,窗口名sWindowName,否則傳入NULL
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/309000.html