我正在使用.NET(C#)为SolidWorks编写一个插件,我在解密SolidWorks应用程序接口文档时遇到了麻烦。
在add - In模板中,有一个为库设置回调信息的ISldWorks.SetAddinCallbackInfo2调用,来自API documentation的签名是:
System.bool SetAddinCallbackInfo2(
System.long ModuleHandle,
System.object AddinCallbacks,
System.int Cookie
)ISwAddin实现需要两个函数来连接到SolidWorks实例bool ConnectToSW(object ThisSW, int cookie),ConnectToSW函数中的bool DisconnectFromSW()是调用SetAddinCallbackInfo2的地方。SolidWorks提供的C#模板如下所示:
public bool ConnectToSW(object ThisSW, int cookie)
{
addinID = cookie;
iSwApp = (ISldWorks)ThisSW;
// Setup callbacks
iSwApp.SetAddinCallbackInfo2(0, this, addinID);
// Setup the command manager
CmdMgr = iSwApp.GetCommandManager(addinID);
AddCommandMgr();
SwEventPtr = (SolidWorks.Interop.sldworks.SldWorks)iSwApp;
openDocs = new Hashtable();
AttachEventHandlers();
return true;
} 在我的插件中,我想组织我的代码,以便回调位于“树”下面的类中,这意味着我将有几个类需要调用SetAddinCallbackInfo2才能在这些类中设置回调。在上面的示例中,它们只是为ModuleHandle传递了一个0,如果SetAddinCallbackInfo2在ConnectToSW函数中调用,但在其他类中调用时却不起作用,这似乎是可行的。
我没有处理COM Interop的丰富经验,ModuleHandle应该是调用SetAddinCallbackInfo2的当前类实例的句柄,还是包含ConnectToSW函数的entry类的句柄?如何获取ModuleHandle
发布于 2020-05-23 21:17:34
我建议创建一个类来处理所有与Solidworks Api相关的东西。目的是隔离所有与Solidworks Api相关的代码,并将剩余的代码库集中在手头的任务上。
然后它将具有如下的公共函数:
public void SetAddinCallbackInfo(int id){
iSwApp.SetAddinCallbackInfo2(0, this, id);
} 我也推荐做一些在你的应用程序和SwDocument类之间工作的类,比如组装,部件等。
https://stackoverflow.com/questions/61969179
复制相似问题