美好时光。对不起,如果我的问题很奇怪,但我对我所面临的事情很陌生。
我的情况如下,我通过 COM 在 C++ 中使用 VB RegExp,如下所示:
#import "RegExp.tlb" no_namespace
...
void DoSomething() {
...
static IRegExpPtr regExp( __uuidof(RegExp) );
regExp->Pattern = A2BSTR(m_szStrReg); // read on dll load from the file
if ( regExp->Test(someString) ) {
IMatchCollectionPtr matches = regExp->Execute(someString);
// my staff here
...
}
...
}
我的问题是:
我做的一切都正确吗?(ps 我知道 CoInit 和 CoUninit,但问题不在于它们)。
regExp
过程安全吗?我问这个的原因是因为我有几个我的班级实例DoSomething()
多次调用它。而且我在 regExp 内部有崩溃。由具有不同参数的 regExp 方法的不同调用中随机的堆损坏/无效内存访问引起。
我检查了 regExp 指针值、regExp->Pattern.GetAddress() 等等。并且它们在不同的过程中是不同的。但是,当我添加了名为 Mutex 并DoSomething()
用它包装时添加了进程间同步 - 崩溃消失了。这就是为什么我要问 regExp 是否在进程之间隐式共享了一些东西?