我最近使用Visual Studio 2012编写了一个ATL对象。我知道'它已注册,因为我可以在C#中使用它(在将其添加到资源之后)。但是,我想使用相同的库编写C ++应用程序。但是,当我尝试将其作为CComPtr调用时,intellisense提示我它无法找到该类。
C#代码:
using BpFFTLib; // <- my ATL object with the Interface IFFT and class FFT
namespace comtest
{
class Program
{
[STAThread]
static void Main(string[] args)
{
BpFFTLib.IFFT fft= new BpFFTLib.FFT();
// do fft stuff, it works, I tested it
}
}
}
然后是C ++代码:
#include <atlbase.h>
#include <atlcom.h>
#include <atlctl.h>
int main(void){
CComPtr<IFFT> pIFFT;
pIFFT.CoCreateInstance(CLSID_FFT);
// do the same fft stuff, but in C++
return 0;
}
我对COM和Windows的其他黑暗艺术仍然很陌生,但我的理解让我相信C ++片段相当于C#片段。我错过了一些include指令吗?
对不起,我无法提供一个完全可编辑的例子。这意味着包括我写的整个FFT库。但是,我知道它有效,因为我在C#中进行了测试,所有参数都在函数调用和所有内容中正确编组。
...后来
所以我意识到我需要包含头文件和对.dll(我的ATL对象)的引用。但是,它仍然无法正常工作。我得到了一百万个神秘的链接器错误。必须有一种简单的方法来做到这一点,我不知道。