views:

1185

answers:

1

I have several ActiveX components that needed to be accessed from a C# project.

I can import them via Visual Studio's add reference dialog, which will also automatically generate wrappers class. (i.e. ABCLib and AxABCLib)

I know that I can generate the primary interop assembly manually by running TLBIMP /primary on each individual OCX file but I could not find a way to generate the ActiveX wrapper unless I do it via Visual Studio user interface.

Is there a command-line version that generate the ActiveX wrapper in the .NET SDK?

I want to generate the AxABCLib version from the PIA I got from TLBIMP manually. (i.e. setting namespaces, output dll filenames etc.) Is it possible?

+2  A: 

Oh... found it after looking at the folder where TLBIMP belongs.

It's called AxImp.

C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\AxImp.exe

So basically, to generate a PIA DLL in your own customized namespace:

  1. Register your OCX

    regsvr32 abc.ocx

  2. Generate a strong name key pair for you ocx by running

    sn -k

  3. Run TLBIMP and specify the desired namespace

    tlbimp abc.ocx /primary /keyfile:abc.snk /out:abc.dll /namespace:MyNamespace

  4. Run AXIMP on the ocx and use the rcw switch to use your own manully generated PIA DLL.

    aximp abc.ocx /source /rcw:abc.dll

That should do it.

There are however some problems with ancient TLBs being imported. I am not sure how to fix that yet.

chakrit