Я хочу вызвать сторонний DLL-файл NPAPI в C, но я допустил ошибку при создании экземпляра.
#include <Windows.h>
#include <stdio.h>
#include "npapi.h"
#include "npfunctions.h"
#include "npruntime.h"
#include "nptypes.h"
short address;
typedef NPError (*pGetProcAddress)(NPPluginFuncs*);
NP_GetEntryPointsFunc _GetEntryPointsFunc;
NP_InitializeFunc _InitializeFunc;
NPPluginFuncs* pFuncs;
NPNetscapeFuncs* sBrowserFuncs;
NPObject* np_object;
NPClass *np_class;
NPP_t npp;
char szMimeType[] = "application/x-np-piao";
int main(){
npp.pdata = 0;
npp.ndata = &npp;
pFuncs = (NPPluginFuncs*)malloc(sizeof(NPPluginFuncs));
sBrowserFuncs = (NPNetscapeFuncs*)malloc(sizeof(NPNetscapeFuncs));
HMODULE hDLL = LoadLibrary("helper.dll");
if(hDLL != NULL){
printf("load library success\n");
}
_GetEntryPointsFunc = (NP_GetEntryPointsFunc)GetProcAddress(hDLL,"NP_GetEntryPoints");
if (_GetEntryPointsFunc)
{
int status = _GetEntryPointsFunc(pFuncs);
printf("NP_GetEntryPointsFunc status %d\n",status);
printf("version %d\n",pFuncs->version);
}
_InitializeFunc = (NP_InitializeFunc)GetProcAddress(hDLL, "NP_Initialize");
if (_InitializeFunc)
{
int status = _InitializeFunc(sBrowserFuncs);
printf("NP_InitializeFunc status %d\n",status);
}
int status = pFuncs->newp(szMimeType, &npp, NP_EMBED, 0, 0, 0, NULL);
printf("newp status %d\n",status);
printf("version %d\n",pFuncs->version);
/**********************************************/
status = pFuncs->getvalue(&npp,NPPVpluginScriptableNPObject,&np_object);//have problem!!!
printf("getvalue status %d\n",status);
/*********************************************/
}
Вот результат операции. output pic
При вызове [NP_GetEntryPoints] и [NP_Initialize] все возвращаются в нормальное состояние до [pFuncs-> getvalue].
Как видите,«Getvalue status» также не отображается в выходных данных. Я хочу знать, что вызывает эту проблему и есть ли лучший способ ее решения.
Прости меня за плохой английский и спасибо за помощь.