奇怪的VB6构建问题(与nlog相关) 这是我使用Nlog C++ API的问题(我的问题是Nlog论坛);我在这里提出这个问题的目的是为了让更多的人了解我的问题,也许也是为了了解VB6 IDE在我的特定场景中无法构建的原因 简要地说,我所遇到的问题是,我很难建立VB6组件,这些组件引用了非托管C++组件,这些组件调用Nlog的C++ C++ API(在NLog.DLL中定义)。构建问题不是在编译时发生的,而是在构建二进制文件时发生的,这向我表明这是某种链接器类型的问题?我对VB6二进制文件是如何产生的了解还不够。生成了VB6二进制文件,但它已损坏,并在调用后不久崩溃
有没有人有过VB6的类似经验(不一定与nlog或C++有关) 编辑:谢谢大家对这个相当模糊的问题的回答。不幸的是,仍然没有进展;我的发现,因为我发布了以下内容:奇怪的VB6构建问题(与nlog相关) 这是我使用Nlog C++ API的问题(我的问题是Nlog论坛);我在这里提出这个问题的目的是为了让更多的人了解我的问题,也许也是为了了解VB6 IDE在我的特定场景中无法构建的原因 简要地说,我所遇到的问题是,我很难建立VB6组件,这些组件引用了非托管C++组件,这些组件调用Nlog的C++ C++ API(在NLog.DLL中定义)。构建问题不是在编译时发生的,而是在构建二进制文件时发生的,这向我表明这是某种链接器类型的问题?我对VB6二进制文件是如何产生的了解还不够。生成了VB6二进制文件,但它已损坏,并在调用后不久崩溃,vb6,build,nlog,Vb6,Build,Nlog,有没有人有过VB6的类似经验(不一定与nlog或C++有关) 编辑:谢谢大家对这个相当模糊的问题的回答。不幸的是,仍然没有进展;我的发现,因为我发布了以下内容: “调整”编译选项似乎对此问题没有帮助 从“空白”VB6项目中添加对Nlog启用的C++组件的引用不会崩溃或导致奇怪的生成问题。所以这不是“本机”VB6问题,可能是nlog与其他引用组件使用的各种组件和第三方库之间的交互问题 至于C++调用约定:nlog启用的C++组件是——我可以看到——遵从这些约定,并且只要它没有做任何Nlog API
edit2:我还应该注意,在构建过程中获得的错误消息是:“加载过程中出错。有关详细信息,请参阅“xxx”。当我打开日志文件时,里面只有:“无法加载控制xxx”。有趣的是,如果我再次尝试构建,对该特定控件的所有引用将从该特定项目中消失,从而导致编译错误。我将尝试调整项目,属性菜单中的一些编译选项,编译面板,查看它们是否会产生任何关于出错原因的额外提示
例如,如果将可执行文件编译为p-code而不是本机代码,它在启动时是否仍会崩溃。运行编译后的二进制文件时会收到什么错误消息 我怀疑编译器/链接器是问题所在:VB6项目中的项目引用没有链接到最终的可执行文件中。VB6中的项目引用实际上是对COM类型库的引用(该库可能嵌入在.dll或其他二进制文件类型中,也可能不嵌入)。项目参考主要用于两个目的:
更有可能的问题是NLog,或者是如何从代码中调用NLog,而不是VB6编译过程中出现的问题。如果您认为这可能是链接器问题,则应该以同样的方式使其崩溃:
如果它没有崩溃,那是另外一回事。这将有助于准确描述错误或屏幕截图 <检查一件事是NLogC.DLL或C++的DLL在哪里建立了正确的调用约定。基本上,除了STDCALL调用约定之外,您不能让DLL函数名被破坏或使用任何东西。如果没有用这两个东西来创建C++ DLL,那么它将不能与VB6一起工作。
通过使用Nlog的COM接口(nlog,COMICOP.DLL)解决了这个问题,我的非托管C++代码。不像C\C++API那样简单,但至少它不会使我的VB6组件崩溃。
“无法加载控制xxx”错误可能是由.oca文件引起的,这些文件是从不同于当前使用的.ocx版本创建的。如果是这种情况,删除.oca文件会有所帮助。不清楚实际错误是什么