Na klaro!
Mit CoIntialize() musst du zunächst mal
COM initializieren.
Am Ende das CoUninitialize() nich vergessen!
Mit dem CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, sl) erstellst du den ShellLink, also die Verknüpfung. sl is ne Variable vom Typ IShellLink, das is das Interface zu deiner neuen Verknüpfung. Diesen benutzt du dazu, um bei dem Link alles einzustellen. Mit IShellLink.SetPath() legst du die Ziel-Datei fest, mit .SetDescription die Beschreibung und so weiter... Anschließend muss die Verknüpfung noch gespeichert werden. Dazu holst du dir über QueryInterface(IPersistFile, pf) ein IPersistFile interface zu deiner Verknüpfung. Jetzt nur noch mit .Save als ".lnk" Datei speichern. Finito!
BTW: IShellLink und IPersistFile muss *nicht* zerstört werden!