tlbexp.exe 更改方法名称案件
我有一个相当奇怪的问题。 我正在将接口从 C# 库导出到 COM。 我已启用“使用 COM 注册”项目设置,因此它调用 tlbexp.exe 来创建类型库。
我们在方法名称上使用驼峰式大小写,我注意到导出的类型库将这些恰好与类名一致的方法更改为 Pascal 大小写...
例如,
interface IFoo
{
void randomClass()
}
class RandomClass
{
}
类型库中导出的 IFoo 定义了 IFoo->RandomClass()而不是 IFoo->randomClass()
关于导致此问题以及如何阻止它的任何想法?
I have a rather strange problem.
I am exporting an interface from a C# library to COM.
I have enabled the 'register with COM' project setting, so it calls tlbexp.exe to make the type libs.
We use camel case on our method names and I noticed that the exported type library changes these any method that happens to coincide with a class name to Pascal case...
e.g
interface IFoo
{
void randomClass()
}
class RandomClass
{
}
The exported IFoo in the type lib defines IFoo->RandomClass() instead of IFoo->randomClass()
Any ideas on what causes this and how to stop it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于 COM 不区分大小写,因此“RandomClass”和“randomClass”在输出库的表中是相同的符号。 (这就是 .NET 指南推荐对类名和方法使用 PascalCasing 的部分原因。)
被选择的将是编译器发出的第一个,从程序员的角度来看,这是相当不确定的!
您可以使用 tlbexp 的
/names
参数选择其中之一,但两种大小写不能在库中共存。要使用 tlbexp 的名称文件,只需创建一个包含标识符列表的文件,每行一个:
然后像这样调用它:
tlbexp 将使用名称文件中定义的符号版本。
Since COM is case-insensitive, both "RandomClass" and "randomClass" are the same symbol in the output library's table. (This is part of the reason why the .NET guidelines recommend PascalCasing for class names and methods.)
The one that gets chosen will be the first one the compiler emits, and this is fairly non-deterministic from a programmer's point of view!
You can choose one or the other, using tlbexp's
/names
parameter, but both casings cannot co-exist in the library.To use tlbexp's names file, you simply create a file with a list of identifiers, one per line:
Then you call it like so:
tlbexp will then use the version of the symbol defined in the names file.