⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opcda_i.cpp

📁 使用OPCST开发的进程内OPCDA服务器
💻 CPP
字号:
// opcda_i.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "opcda_i.h"
#include "winbase.h"
#include "..\include\logc.h"
#include "..\include\opcst_ipt.h"
#include "opcst_x.h"

extern HINSTANCE hInstance;//模块实例

SOPCRegisterInfo OPCRegInfo =	//OPC DA系统注册表信息
{
	"OPC Server of Inprocess" ,
		"OPCDA.Inprocess(vc)" ,
		
	{ 0x4473013d, 0xc9a7, 0x11d4, 
	{0xbe, 	0xf5, 	0x2d, 	0x0, 	0xda, 	0x20, 	0xdb,	0x5c} 
	}
	
};


//标记已加载设备标记
static bool bCalled = false;


////DLL库主函数


BOOL APIENTRY DllMain(HANDLE hModule, 
					  DWORD  ul_reason_for_call, 
					  LPVOID lpReserved
					  )
{

    switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		{
			InitDeviceBuffer();

			hInstance = (HMODULE)hModule;
			
			InitParm();
			
			InitOPCServer(hInstance, &OPCServerInfo , 
				&OPCRegInfo,  &VendorInfo,ReadVariant,WriteVariant);		

			break;
		}
	case DLL_THREAD_ATTACH://DLL在加载过程中要CALL多次,添加Tag操作只需一次
		break;
	case DLL_THREAD_DETACH:
		break;
	case DLL_PROCESS_DETACH:
		break;
    }
    return TRUE;
}

/////进程内组件标准函数
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppvOut)
{
	HRESULT hr;
	hr = DLL_GetClassObject(rclsid, riid, ppvOut);
	if(SUCCEEDED(hr))
	{
		if(!bCalled)
		{
			LoadDeviceTag();
			bCalled = true;
		}
	}
	return hr;
}

STDAPI  DllCanUnloadNow(void)
{
	return DLL_CanUnloadNow();
}

STDAPI DllRegisterServer(void)
{
	return DLL_RegisterServer();
}

STDAPI DllUnregisterServer(void)
{
	return DLL_UnregisterServer();
}
//////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -