Supongamos que querés que tus OCX y DLL queden en la misma carpeta en donde ponés el exe.
Tenés 2 formas de hacer eso:
1) Copiando los OCX y DLL en la misma carpeta del exe y luego registrándolas
(se registran llendo a Inicio -> ejecutar y escribiendo:
regsvr32.exe ruta\nombrearchivo.ocx)
Haciendo esto, hay que tener cuidado. Esto se puede hacer para OCX y DLL propias o alguna que la máquina no tenga. Pero no es conveniente hacerlo si los OCX y DLL son del sistema. Ahí sí conviene ponerlos en System32. Lo que no conviene es hacerlo a mano. Siempre es mejor delegar esta función a un buen instalador como ser el InnoSetUp.
2) Copiando los OCX y DLL en la misma carpeta del exe y luego llamándolos desde visual con una llamada como las que se usan para las APIs.
Por ej, yo me bajé de internet una DLL que se llama unzip32.dll y esta DLL venía con un ejemplo para usarla copiándola en la misma carpeta del programa y llamándola así:
Public Declare Function Wiz_SingleEntryUnzip Lib "unzip32.dll" (ByVal ifnc As Long, ByRef ifnv As ZIPnames, ByVal xfnc As Long, ByRef xfnv As ZIPnames, dcll As UNZIPOPTIONS, Userf As UNZIPUSERFUNCTION) As Long
No se por qué querés que tus OCX queden en otro lugar que no sea System32. Tal vez no querés que el usuario tenga problemas al instalar tu programa (problemas de versiones de componentes). Si es ese tu problema, te recomiendo que uses el InnoSetUp. Es buenísimo. Si hacés un instalador con ese programa y lo testeas antes de entregarlo a los usuarios finales, vas a ver que no vas a volver a tener problemas de versiones de OXC y DLLs.
Saludos.
Caro.