开发者

tlbexp.exe changes method names' case

开发者 https://www.devze.com 2023-01-05 02:50 出处:网络
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.

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() instea开发者_StackOverflow中文版d of IFoo->randomClass()

Any ideas on what causes this and how to stop it?


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:

RandomClass
SomeOtherIdentifier

Then you call it like so:

tlbexp MyAssembly.dll /names=MyNames.txt

tlbexp will then use the version of the symbol defined in the names file.

0

精彩评论

暂无评论...
验证码 换一张
取 消