Page 1 of 1

파폭 플러그인 제작중입니다. 도와주세요~~

Posted: 2009 05 14 20:44 56
by Guest
ActiveX 로 만들어진 제품의 기능을 플러그인으로 구현하기 위해 요즘 고생중인 1인입니다.

테스트 중 막히는 곳이 있어 질문 올리니 고수님들 도움 부탁드립니다. ^^;

질문 내역은 다음과 같습니다.

1. 플러그인에서 MFC DLL을 로딩하여 내부 함수를 호출하는 작업을 진행중입니다. Vsita - VS2005 환경에서 작업
을 진행했는데, 파폭과 크롬은 정상 동작, 정상 종료되지만 사파리와 오페라에선 정상 동작 후 비정상 종료 현상
이 있군요. 사파리, 오페라에서 따로 지정해야 하는 옵션이나 기타 설정이 있는지요.

2. 1번의 오류를 해결해보려했지만, 짚이는 것 조차 없는 관계로 일단 사파이와 오페라의 오류를 무시하고 작업을
진행중입니다.
VS2005 환경에서 컴파일한 프로그램을 실행 시 별도 실행 킷을 필요로하기 때문에 이를 XP-VS6 환경으로 옮겨서
작업을 재진행하였습니다. 그런데 이번엔 파폭이 플러그인을 인식하지 못하는 현상이 발생하는군요.
오히려 크롬은 파폭 폴더에 위치한 플러그인을 감지하여 정상동작합니다. 이런 현상이 발생할 시 확인 또는 시도해
볼만한 작업으로 무엇이 있을까요?

질문이 애매해서 죄송합니다. ㅠ.ㅠ 초간단 테스트 플러그인에 사용된 소스 같이 올립니다.
// NPTest.cpp : Defines the initialization routines for the DLL.
//

#include "stdafx.h"
#include "NPTest.h"
#include "npupp.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

typedef void (*PFNSHWODIALOG)(void);
NPError OSCALL NP_Initialize(NPNetscapeFuncs* aNPNFuncs)
{
AfxMessageBox(_T("hi~!")) ;

AFX_MANAGE_STATE(AfxGetStaticModuleState( ));

try {
HMODULE hDll3 = LoadLibraryEx(_T("d:\\work\\testdll.dll"), NULL, LOAD_WITH_ALTERED_SEARCH_PATH);

if (hDll3)
{
PFNSHWODIALOG pfnShowDialog = (PFNSHWODIALOG)GetProcAddress(hDll3, "ShowDialog");
if (!pfnShowDialog)
AfxMessageBox(_T("Fail GetProcAddress ShowDialog"));
else
pfnShowDialog();
}
else
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(), 0/*Default language*/, (LPTSTR) &lpMsgBuf, 0, NULL );

CString strMsg;
strMsg.Format(_T("LoadLibrary Fail [%s]"), lpMsgBuf);
AfxMessageBox(strMsg);

// Free the buffer.
LocalFree( lpMsgBuf );
}

FreeLibrary(hDll3);
}catch(CException *pe)
{
TCHAR szErr[MAX_PATH] = {0, };
pe->GetErrorMessage(szErr, MAX_PATH);

AfxMessageBox(szErr);

pe->Delete();
}

return NPERR_NO_ERROR;
}

NPError OSCALL NP_Shutdown()
{
AfxMessageBox(_T("bye~!")) ;
return NPERR_NO_ERROR;
}

NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* aNPPFuncs)
{
return NPERR_NO_ERROR;
}