Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c++;?_C++_Visual C++_Com_Typelib - Fatal编程技术网

C++ 如何在c++;?

C++ 如何在c++;?,c++,visual-c++,com,typelib,C++,Visual C++,Com,Typelib,目前我正在使用以下语句: #import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\test.tlb" named_guids 但我是以编程方式获取文件夹路径的。i、 例如,“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727” 我必须从这个路径加载test.tlb,这个路径位于一个变量中,比如说,folderpath。我必须通过连接folderpath+test.tlb以编程方式导入tlb。如何执行

目前我正在使用以下语句:

 #import "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\test.tlb" named_guids
但我是以编程方式获取文件夹路径的。i、 例如,
“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727”


我必须从这个路径加载
test.tlb
,这个路径位于一个变量中,比如说,
folderpath
。我必须通过连接
folderpath+test.tlb
以编程方式导入tlb。如何执行此操作?

如果有帮助,您可以指定程序ID,例如:

#import "progid:Outlook.Application" named_guids

这比使用硬编码路径要好。

要在运行时以编程方式加载TLB文件(COM类型库),您可以利用它

编译时导入的TLB应复制到一个众所周知且一致的位置,在bild期间可以在该位置找到它。如果您在团队环境中工作,您可能希望将TLB检查到SCM系统中,以便每个人都从相同的相对位置引用相同版本的TLB文件


此外,TLB所在的路径可以作为包含目录(与用于头文件的目录相同)提供给编译器。

这看起来非常像一个副本,您到底想完成什么任务?为什么您自己编译的项目的TLB位于.NET目录内?它是如何实现的?因为这是硬编码来删除这个硬编码,所以我要问这个问题。创建tlb和将程序集注册为COM服务器是不相关的。您也可以使用汇编过程中生成的tlb,并在不使用/tlb参数的情况下注册组件。这样一来,你一开始就不会有这个问题了。我该怎么做呢。假设我的c#名称空间是TestNm,接口是ITest类是SqlClass,最后myy tlb是Test.tlb,那么#import“progid:Test.tlb”是正确的…#import“Guid:35145a33-e434-49dc-92cf-e056c508525a”命名为我这样尝试过的Guid。但它显示无法打开lobrary“Guid:35145a33-e434-49dc-92cf-e056c508525a”没有此类库我尝试了#导入“progid:Test.SqlClass”,但出现了错误。请注意,您注册了类型库了吗?除非您先这样做,否则您将无法通过GUID或progid访问它。