[ASP] custom DLL of OCX

Pagina: 1
Acties:

  • GarBaGe
  • Registratie: December 1999
  • Laatst online: 21:48
Heeft iemand wel eens in C een custom DLL of OCX (ActiveX) component geschreven om vervolgens in ASP te gebruiken ??

Ik ben dit aan het proberen, en het bakken van mijn OCX is geen probleem. Ook niet het registreren en in de winnt\system32\inetsrv dir zetten van mijn ocx.
Maar als ik nu
code:
1
Set dllObject = Server.CreateObject("ocxmember")

aanroep, krijg ik nog steeds een
"Error Type: Server object, ASP 0177 (0x800401F3) Invalid ProgID"

Net alsof de component niet bestaat :?

Heeft iemand hier ervaring mee, of weet iemand iets ??
In de MS KB staat een voorbeeld waar men vanuit VB een DLL bakt. In feite doe ik dezelfde stappen, maar dan in C...

Ryzen9 5900X; 16GB DDR4-3200 ; RTX-4080S ; 7TB SSD


Verwijderd

Hoe bak je die ocx dan in c(++)? Allemaal je eigen code of gebruik je ATL?

  • GarBaGe
  • Registratie: December 1999
  • Laatst online: 21:48
Ik maak een nieuwe lege "MFC ActiveX ControlWizard" en gooi hier mijn custom C-code bij :)

Ik heb mijn component nu wel kunnen terugvinden in de "ActiveX Controls" van de Toolbox van Interdev.
Als ik die sleep naar mijn ASP-code, genereert ie de volgende regel:
<OBJECT CLASSID="clsid:6E3F5D68-6AB7-4C3F-AD43-D6F58503095" id=Ocxmember1></OBJECT>

Ryzen9 5900X; 16GB DDR4-3200 ; RTX-4080S ; 7TB SSD


Verwijderd

Mja moet je even kijken welk progid daar bij hoort? zal wel iets zijn van blaat.iets.1 , even zoeken met regedit in hkey_classes_root naar die guid.

  • GarBaGe
  • Registratie: December 1999
  • Laatst online: 21:48
Op woensdag 06 februari 2002 11:11 schreef Yarvieh het volgende:
Mja moet je even kijken welk progid daar bij hoort? zal wel iets zijn van blaat.iets.1 , even zoeken met regedit in hkey_classes_root naar die guid.
Hebbes, hij heeft dat ding: "OCXMEMBER.OcxmemberCtrl.1" genoemd.
ff testen...

bijna, maar wel 1 stap verder.
Nu geeft ie een:
"Object doesn't support this property or method: 'CheckMemberInGroup'". Dit is de belangrijkste functie. Functie-sig ziet er zo uit:
"BOOL CheckMemberInGroup( LPCTSTR lpszMemberName, LPCTSTR lpszGroupName)"

Ryzen9 5900X; 16GB DDR4-3200 ; RTX-4080S ; 7TB SSD


Verwijderd

Mja bij control wizzard denk ik eigenlijk vrij rap aan een control voor in m'n vb toolboxje, is niet echt iets wat je nodig hebt op je iis, ik raad je eigenlijk aan ipv de mfc control wizzard, de atl wizzard te pakken en 'n normaal Com component in elkaar te draaien.

Verwijderd

Heb je die functie als 'public' gedefinieerd?

Verwijderd

of je 'm public markeerd in je klasse maakt niet zo heel veel uit, 't is meer dat de functie in je interface definities(idl/tlb) files bekend moet zijn en dat je component IDispatch dient te implementeren voor dat je 'm vanuit scripting talen kunt benaderen.

  • GarBaGe
  • Registratie: December 1999
  • Laatst online: 21:48
Het is nu bijna gelukt. Ik heb de ATL-wizard gebruik en via "insert -> new ATL-object" een "ActiveX Server Component" toegevoegd. Deze heb ik via rechtsklik op de nieuwe class-> add method een aantal methodes toegewezen.
Nu herkent ie in ASP de nieuwe methodes.

Nu heb ik nog een ander klein probleem, namelijk een "Type mismatch".
De functie gebruikt als invoer 2 argumenten als Strings. Eigenlijk wilde ik 2 argumenten van het type: "LPCTSTR", maar dat is geen geldig type binnen oleautomation.
Dus heb ik er "unsigned char" van gemaakt, maar als ik in ASP deze functie aanroep met dllObject.exectuteFunction( "1e param", "2e param"), krijg ik nog een "Type mismatch"
.
Ik moet dus een type hebben wat zowel ASP snapt, als C++, als oleautomation...

Ryzen9 5900X; 16GB DDR4-3200 ; RTX-4080S ; 7TB SSD


Verwijderd

Op donderdag 07 februari 2002 14:45 schreef GarBaGe het volgende:
Ik moet dus een type hebben wat zowel ASP snapt, als C++, als oleautomation...
BSTR *D evt kan je nog comutil.h (linken met comsupp.lib) includen welke wat functies bevat om BSTR's te converteren van en naar normale strings.

  • GarBaGe
  • Registratie: December 1999
  • Laatst online: 21:48
Thanx.
Het werkt nu bijna.
Ik heb een "Hello World" functie in mijn ActiveX component gebakken om via het ASP-object "Response" iets in mijn pagina te schrijven:
code:
1
2
3
CComVariant vtRespon;
vtRespon="Hello World!";
m_piResponse->Write(vtRespon);

Nu ben ik er niet in geslaagd een return-waarde in de vorm van een HRESULT terug te geven, dus probeer ik het maar via het ASP-object "Server".
code:
1
2
3
4
5
6
7
CComBSTR            bstrVarName("MemberInGroup");
CComVariant        bstrVarpValue;
VARIANT          pValue;

bstrVarpValue = "YES";
pValue = bstrVarpValue;
m_piSession->put_Value(bstrVarName, pValue);

Ryzen9 5900X; 16GB DDR4-3200 ; RTX-4080S ; 7TB SSD


Verwijderd

Je geeft in je HRESULT ook alleen de status aan van hoe je proc verlopen is E_FAIL voor failed S_OK voor ok (en zo heb je er nog een hele berg maar die mag je zelf opzoeken) als je een string terug wil geven vanuit je functie geef je een pointer naar een BSTR mee aan je functie en markeer je 'm in je idl source als retval.

voorbeeld:
Definitie in idl:
code:
1
2
  [ propget,helpstring("General description of this driver")] 
  HRESULT Description([out, retval] BSTR* ReturnVal);

Bij behorende C++ code:
code:
1
2
3
4
5
6
7
#define Driver_description L"HD44780 Driver 0.1Beta"

STDMETHODIMP C44780::get_Description(BSTR *ReturnVal)
{
    *ReturnVal = SysAllocString(Driver_description);  
    return S_OK;
}

Hoop je dat je hier wat mee kunt, anders moet je 'n iets uitgebreidere vraag stellen want "ik krijg het niet voor elkaar" is voor mij ook een beetje gokken wat er mis gaat :)
Pagina: 1