Язык C вызывает NPAPI dll, но создает объект Ошибка - PullRequest
0 голосов
/ 31 января 2019

Я хочу вызвать сторонний 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» также не отображается в выходных данных. Я хочу знать, что вызывает эту проблему и есть ли лучший способ ее решения.

Прости меня за плохой английский и спасибо за помощь.

1 Ответ

0 голосов
/ 04 февраля 2019

Трудно сказать, что может быть причиной вашей проблемы, но я бы сказал, что один неочевидный красный флаг - это то, что вы не заполнили указатели на функции в sBrowserFuncs - они не предоставляются плагином, онипредоставлено браузером.Это почти наверняка ваша первая проблема.

...