有关编写DLL文件问题,请大家帮忙看看!
源代码:
#include "stdafx.h"
#include <atlbase.h>
#include <objbase.h>
#include <iostream>
#include "opc.h"
#include "OPCdll.h"
#include "opc_i.c"
#include <string>
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define OPC_SERVER_NAME L"OPC.SimaticNET" // e.g.: L"OPC.Evaluation:HV supply.1"
#define XVAL fltVal
unsigned pp[10];
BEGIN_MESSAGE_MAP(COPCdllApp, CWinApp)
END_MESSAGE_MAP()
COPCdllApp::COPCdllApp()
{
}
COPCdllApp theApp;
BOOL COPCdllApp::InitInstance()
{
COleObjectFactory::RegisterAll();
return TRUE;
}
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return AfxDllGetClassObject(rclsid, riid, ppv);
}
STDAPI DllCanUnloadNow(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return AfxDllCanUnloadNow();
}
STDAPI DllRegisterServer(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
COleObjectFactory::UpdateRegistryAll();
return S_OK;
}
IOPCServer* InstantiateServer(wchar_t ServerName[])
{
CLSID CLSID_OPCServer;
HRESULT hr;
hr = CLSIDFromString(ServerName, &CLSID_OPCServer);
_ASSERT(!FAILED(hr));
LONG cmq = 1;
MULTI_QI queue[1] =
{{&IID_IOPCServer,
NULL,
0}};
hr = CoCreateInstanceEx(CLSID_OPCServer, NULL, CLSCTX_SERVER,
/*&CoServerInfo*/NULL, cmq, queue);
_ASSERT(!hr);
return(IOPCServer*) queue[0].pItf;
}
void AddTheGroup(IOPCServer* pIOPCServer, IOPCItemMgt* &pIOPCItemMgt,
OPCHANDLE& hServerGroup)
{
DWORD dwUpdateRate = 0;
OPCHANDLE hClientGroup = 0;
HRESULT hr = pIOPCServer->AddGroup(/*szName*/ L"Group1",
/*bActive*/ FALSE,
/*dwRequestedUpdateRate*/ dwUpdateRate,
/*hClientGroup*/ hClientGroup,
/*pTimeBias*/ 0,
/*pPercentDeadband*/ 0,
/*dwLCID*/0,
/*phServerGroup*/&hServerGroup,
&dwUpdateRate,
/*riid*/ IID_IOPCItemMgt,
/*ppUnk*/ (IUnknown**) &pIOPCItemMgt);
_ASSERT(!FAILED(hr));
}
这个DLL可以运行,但是在调用Start7()时非常耗时间,导致我的界面接受PLC数据时经常卡住死机!!!由于我初次编写DLL文件,这些代码都是按照网上一步一步写出来的,不知怎么改进,所以恳请各位高手指点一下!!谢谢!