1
0
Fork 0
master
developer 2021-11-23 18:53:04 +08:00
parent aea565d318
commit 109406c7af
4 changed files with 74 additions and 42 deletions

View File

@ -70,7 +70,7 @@
## 📦 安装第三方依赖
Windows 小程序运行环境需要安装以下依赖,请提前配置环境:
- 请下载依赖包[点我下载](https://app.finogeeks.com/lib.tar.gz.bz2)
- 请下载依赖包[点我下载](https://app.finogeeks.com/finclip-lib.tar.gz.bz2)
- 下载完后解压到vendor/finclip/lib目录中
- 建议使用 Visual Studio 2019 版本 [点我下载](https://support.microsoft.com/en-us/topic/the-latest-supported-visual-c-downloads-2647da03-1eea-4433-9aff-95f26a218cc0)

View File

@ -1,7 +1,8 @@
// FinClip.cpp : Defines the entry point for the application.
//
#include "Resource.h"
#include "finclip_wrapper.h"
#include "vendor/finclip/include/finclip_api.h"
#include "vendor/finclip/include/finclip_wrapper.h"
// Windows Header Files
#include <windows.h>
// C RunTime Header Files
@ -15,9 +16,10 @@
#include <fstream>
#include <iostream>
#include <sstream>
#pragma comment(lib, "FinClipSDKWrapper.lib")
#define MAX_LOADSTRING 100
#pragma comment(lib, "FinClipSDKWrapper.lib")
using namespace std;
using json = nlohmann::json;
@ -59,14 +61,29 @@ std::wstring utf8_decode(const std::string &str, int CP = CP_UTF8) {
MultiByteToWideChar(CP, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
return wstrTo;
}
class CustomApi : public IApi {
void invoke(const char *event, const char *param,
FinClipSDKCallback callback) {
class CustomWebApi : public IApi {
void invoke(const char *event, const char *param, IApiCallback *callback) {
std::string data = param;
std::string e = event;
MessageBox(NULL, utf8_decode(e).c_str(), utf8_decode(data).c_str(), 0);
callback->Callback("{\"data\":\"ok\"}");
}
FinClipApiType GetApiType() const { return FinClipApiType::kWebView; }
const char *apis() { return "customWebApi"; }
size_t size() { return 1l; }
};
class CustomApi : public IApi {
void invoke(const char *event, const char *param, IApiCallback *callback) {
std::string data = param;
std::string e = event;
callback->Callback("{\"data\":\"ok\"}");
}
FinClipApiType GetApiType() const { return FinClipApiType::kApplet; }
@ -197,6 +214,8 @@ void init_finclipsdk(int app_store, std::wstring wappkey, std::wstring wsecret,
configpacker->AddConfig(config);
CustomApi *c_api = new CustomApi();
configpacker->RegisterApi(c_api);
CustomWebApi *c_web_api = new CustomWebApi();
configpacker->RegisterApi(c_web_api);
Initialize(hInst, configpacker);
is_initialized = TRUE;
}
@ -209,25 +228,8 @@ void finclip_applet_callback(IEvent *event) {
const char *val = event->GetStr("hWnd");
std::string s(val);
hWnd_applet = (HWND)strtoul(s.c_str(), NULL, 16);
/* ::SetParent(hWnd, gHwnd);
::SetWindowPos(hWnd, NULL, 0, 0, 414, 736, 0);
::ShowWindow(hWnd, SW_SHOWNORMAL);*/
}
event->Release();
// HWND hWnd = event->GetHandle();
// //::PostMessage(hWnd, WM_SYSCOMMAND, SW_MAXIMIZE, 0);
// //::PostMessage(hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
// COPYDATASTRUCT CopyData;
// char szSendBuf[100];
// time_t timenow;
// time(&timenow);
// sprintf(szSendBuf, "%s", ctime(&timenow));
// //注意ctime()返回的字符串后面带了'\n' CopyData.dwData = 0;
// CopyData.cbData = strlen(szSendBuf);
// szSendBuf[CopyData.cbData - 1] = '\0';
// CopyData.lpData = szSendBuf;
// ::SendMessage(hWnd, WM_COPYDATA, (WPARAM)gHwnd, (LPARAM)&CopyData);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,
LPARAM lParam) {
@ -237,6 +239,13 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,
case WM_COMMAND:
if (LOWORD(wParam) == IDM_SENDMESSAGE) {
WCHAR appid[1024];
GetWindowText(hWnd_appid, appid, 1023);
std::wstring wappid(appid);
InvokeWebApi(utf8_encode(wappid).c_str(), "test_custom_api",
"{params:'a'}");
break;
}
if (LOWORD(wParam) == IDM_START_APPLET) {
WCHAR key[1024];
@ -318,6 +327,8 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,
int i = 0;
int j = 0;
::SetWindowPos(hWnd_container, NULL, 450, 10, 450, 750, 0);
/*InvalidateRect(hWnd_container, NULL, TRUE);
UpdateWindow(hWnd_container);*/
break;
}
case WM_DESTROY: {
@ -411,7 +422,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,
CreateWindowW(L"BUTTON", L"open", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
100, 250, 200, 50, hWnd, (HMENU)IDM_START_APPLET,
((LPCREATESTRUCT)lParam)->hInstance, NULL);
CreateWindowW(L"BUTTON", L"sendmessage",
CreateWindowW(L"BUTTON", L"InvokeWebApi",
WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 100, 350, 200, 50,
hWnd, (HMENU)IDM_SENDMESSAGE,
((LPCREATESTRUCT)lParam)->hInstance, NULL);

View File

@ -16,7 +16,7 @@
#include <windows.h>
/**
* @brief APIjssdk
*
*
*/
enum class FinClipApiType
{
@ -25,24 +25,20 @@ enum class FinClipApiType
};
/**
* @brief
*
*
*/
struct IKnown
{};
/// SDK统一事件接口
/**
* @brief API
{
"size": 100,
"data": [[{},{}...],[{},{}...]]
}
*/
struct IResultSet : public IKnown
{
@ -113,7 +109,7 @@ public:
};
/**
* @brief SDK
*
*
*/
struct IEvent : public IResultSet
{
@ -141,6 +137,13 @@ struct IEvent : public IResultSet
virtual void Release() = 0;
};
struct IApiCallback
{
public:
virtual void Callback(const char* event) = 0;
};
//函数指针回调
/**
* @params ret 0,1
@ -148,7 +151,7 @@ struct IEvent : public IResultSet
*
*
*/
typedef void (*FinClipSDKCallback)(IEvent* event);
typedef void (*FinClipSDKCallback)(IEvent*);
///数据打包器接口
struct IFinPacker : public IKnown
@ -260,7 +263,7 @@ struct IApi
* @param param
* @param callback
*/
virtual void invoke(const char* event, const char* param, FinClipSDKCallback callback) = 0;
virtual void invoke(const char* event, const char* param, IApiCallback* callback) = 0;
/**
* @brief Apiapiwebview api

View File

@ -44,7 +44,7 @@ DLL_EXPORT IPackerFactory* FINSTDMETHODCALLTYPE GetPackerFactory();
* @warning
* @exception
*/
DLL_EXPORT HRESULT FINSTDMETHODCALLTYPE CloseAllApplet();
DLL_EXPORT int FINSTDMETHODCALLTYPE CloseAllApplet();
/**
* @brief
@ -59,7 +59,7 @@ DLL_EXPORT HRESULT FINSTDMETHODCALLTYPE CloseAllApplet();
* @warning
* @exception
*/
DLL_EXPORT HRESULT FINSTDMETHODCALLTYPE CleanCache();
DLL_EXPORT int FINSTDMETHODCALLTYPE CleanCache();
///小程序Api
/**打开小程序
@ -70,12 +70,30 @@ DLL_EXPORT HRESULT FINSTDMETHODCALLTYPE CleanCache();
* @param callback
* @return 01
*/
DLL_EXPORT HRESULT FINSTDMETHODCALLTYPE StartApplet(HWND hWnd, int apptype, const char* appid, const char* page_path,
IFinPacker* params, FinClipSDKCallback callback);
DLL_EXPORT int FINSTDMETHODCALLTYPE StartApplet(HWND hWnd, int appstore, const char* appid, const char* page_path,
IFinPacker* params, FinClipSDKCallback callback);
/**
* @brief Set the Applet Pos object
*
* @param appid
* @param appstore
* @param left
* @param top
* @param width
* @param height
* @return DLL_EXPORT
*/
DLL_EXPORT void FINSTDMETHODCALLTYPE SetAppletPos(const char* appid, int appstore, int left, int top, int width,
int height);
DLL_EXPORT HWND FINSTDMETHODCALLTYPE SetAppletPos(const char* appid, int appstore, int left, int top, int width,
int height);
DLL_EXPORT HRESULT FINSTDMETHODCALLTYPE FinClipShutdown();
/**
* @brief
*
* @return DLL_EXPORT
*/
DLL_EXPORT int FINSTDMETHODCALLTYPE FinClipShutdown();
DLL_EXPORT int FINSTDMETHODCALLTYPE InvokeWebApi(const char* app_id, const char* api_name, const char* params);
#ifdef __cplusplus
}