本来不是什么大问题,不过鉴于我对.net的熟悉程度,和半天的时间,还是记录一下。另外blog也好久没更新了,顺便刷一篇。

本问题涉及到两个模块: a.dll: c++编写,本机代码;b.exe: c#编写,托管代码。b调用a,运行时有点问题,但不确定是哪边的原因,故开始debug。但发现,不管是从a启动还是从b启动,调试器都跟不进a的源代码。浪费一上午的时间后发现,进行如下设置即可:

如果从a启动,a的项目属性|Debugging|Debugger Type必须设为MixedNative Only。这一点上我一开始被默认值Auto给误导了,以为调试器会智能选择,没想到它“大智若愚”。

如果从b启动,则需要选中b的项目属性|Debug|Enable unmanaged code debugging

另外C#调用COM时传递数组的方法,参见:http://support.microsoft.com/kb/305990/zh-cn