C语言调用NPAPI dll,但创建对象错误

C语言调用NPAPI dll,但创建对象错误,c,dll,npapi,C,Dll,Npapi,我想在C中调用第三方NPAPI DLL文件,但在创建实例时出错 #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_GetEnt

我想在C中调用第三方NPAPI DLL文件,但在创建实例时出错

#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);
    /*********************************************/

} 
#包括
#包括
#包括“npapi.h”
#包括“npfunctions.h”
#包括“npruntime.h”
#包括“nptypes.h”
短地址;
类型定义NPError(*pGetProcAddress)(NPPluginFuncs*);
NP_GetEntryPointsFunc_GetEntryPointsFunc;
NP_InitializeFunc _InitializeFunc;
NPPluginFuncs*pFuncs;
NPNetscapeFuncs*sBrowserFuncs;
NPObject*np_对象;
NPClass*np_类;
核电站;
char szMimeType[]=“应用程序/x-np-piao”;
int main(){
npp.pdata=0;
npp.nda=&npp;
pFuncs=(NPPluginFuncs*)malloc(sizeof(NPPluginFuncs));
sBrowserFuncs=(NPNetscapeFuncs*)malloc(sizeof(NPNetscapeFuncs));
HMODULE hDLL=LoadLibrary(“helper.dll”);
如果(hDLL!=NULL){
printf(“加载库成功\n”);
}
_GetEntryPointsFunc=(NP_GetEntryPointsFunc)GetProcAddress(hDLL,“NP_GetEntryPoints”);
if(_GetEntryPointsFunc)
{        
int status=_GetEntryPointsFunc(pFuncs);
printf(“NP_GetEntryPointsFunc状态%d\n”,状态);
printf(“版本%d\n”,pFuncs->version);
}
_InitializeFunc=(NP_InitializeFunc)GetProcAddress(hDLL,“NP_Initialize”);
如果(_InitializeFunc)
{
int status=_InitializeFunc(sBrowserFuncs);
printf(“NP_InitializeFunc状态%d\n”,状态);
}
int status=pFuncs->newp(szMimeType,&npp,NP_嵌入,0,0,NULL);
printf(“newp状态%d\n”,状态);
printf(“版本%d\n”,pFuncs->version);
/**********************************************/
status=pFuncs->getvalue(&npp,NPPVpluginScriptableNPObject,&np_object);//有问题!!!
printf(“getvalue状态%d\n”,状态);
/*********************************************/
} 
这是操作的结果。

在对[NP_GetEntryPoints]和[NP_Initialize]的调用中,所有调用都恢复正常,直到[pFuncs->getvalue]

正如您所看到的,“getvalue状态”也不会出现在输出中。我想知道是什么导致了这个问题,以及是否有更好的方法来解决它


请原谅我的英语不好,谢谢你的帮助。

很难说是什么导致了你的问题,但我要说的是一个明确的危险信号是你没有填写sBrowserFuncs中的函数指针——这些不是由插件提供的,它们是由浏览器提供的。这几乎肯定是你的第一个问题