PBToolboxAI v4 ← Site

8. Licença e modo de demonstração #

← FAQ e resolução de problemas · Índice


O PBToolboxAI é uma biblioteca comercial. O controlo da licença é totalmente offline: sem ligação, sem ativação, sem chamada a servidor. Uma chave assinada é atribuída no arranque e a DLL verifica-a localmente.


8.1 Os três tipos de chaves #

As chaves são cumuláveis: PBT_SetLicense pode ser chamada as vezes necessárias, uma vez que a biblioteca retém uma chave por tipo.

TipoTitularDesbloqueia
devNominativa, um programadorApenas no IDE do PowerBuilder
runtimeA sua empresa, incorporada na aplicação entregueApenas num executável compilado
demoFornecida com a aplicação de demonstraçãoA aplicação de demonstração, no IDE, até à expiração

Um projeto necessita, portanto, de ambas: um posto dev por programador e uma chave runtime para a aplicação entregue aos seus clientes.

A deteção «IDE ou executável» é efetuada pela própria DLL (nome do processo, módulos de design-time carregados), e não por código PowerBuilder — não pode ser contornada a partir das suas fontes.


8.2 Atribuir a chave #

Há apenas uma coisa a fazer, antes da abertura da primeira window:

// Declaracao - objeto application, "Local External Functions"
Function long PBT_SetLicense (string as_client, string as_key) Library "pbtoolboxai.dll"
// Event open do objeto application
long ll_rc
string ls_dev_key

// A chave RUNTIME vai no codigo : TEM de ficar dentro do executavel.
ll_rc = PBT_SetLicense(gs_licensee, gs_runtime_key)

// A chave DEV le-se do posto : so desbloqueia o IDE, e no codigo iria em
// cada copia entregue sem ali servir para nada.
ls_dev_key = ProfileString("pbtoolboxai.ini", "license", "dev", "")
if ls_dev_key <> "" then ll_rc = PBT_SetLicense(gs_licensee, ls_dev_key)

Open(w_main)

A chave é definida através da função da DLL, nunca através de um método de componente: aplica-se a todo o processo e tem de ser definida antes de existir qualquer componente. É pela mesma razão que PBT_LicenseStatus não pede qualquer handle.

O titular é passado em claro, como primeiro argumento: é o nome (ou endereço de e-mail) em que a licença foi emitida e tem de corresponder ao que a chave assinada contém. Assim, uma chave não pode circular sem o nome de quem a comprou.

RetornoSignificado
0Chave válida e retida
-1Formato de chave inválido
-2Assinatura inválida (chave alterada ou externa)
-3Manutenção expirada para esta versão da biblioteca (ver 8.5)
-4Chave demo expirada
-5O titular indicado não corresponde ao da chave

💡 Que chave vai onde. A chave runtime pertence ao código: tem de ficar dentro do executável que entrega. A chave dev não — só desbloqueia o IDE, por isso dentro de um executável não serve para nada e mesmo assim circula, com o nome da sua empresa. O seu lugar é um ficheiro pbtoolboxai.ini junto ao IDE, ou um valor no registo.

Atribuir a chave depois da criação de um componente também funciona: os componentes já abertos são desbloqueados de imediato. Contudo, o mais simples continua a ser o event open da aplicação.

💡 A chave deve ser conservada numa constante ou num recurso da aplicação. É assinada: não contém qualquer segredo explorável e não pode ser modificada sem invalidar a respetiva assinatura.


8.3 Verificar o estado da licença #

// Declaracao
Function long PBT_LicenseStatus (ref string as_json, long al_len) Library "pbtoolboxai.dll"
string ls_status

ls_status = Space(1024)
PBT_LicenseStatus(ls_status, 1024)
// -> {"licensed":true,"ide":false,"keys":{...},"reason":""}

Útil na fase de integração para verificar se uma chave é efetivamente tida em conta, ou para registar um arranque no registo aplicacional.


8.4 O modo de demonstração #

Sem chave válida — ou com uma chave que não se aplica ao contexto (uma chave dev num exe, por exemplo) — a biblioteca funciona em modo de demonstração: tudo é utilizável, tudo é visível, mas com limites — exceto os cinco componentes da edição comunidade, descritos logo abaixo, que nunca são limitados.

Cinco componentes continuam gratuitos #

A edição comunidade não exige nada: sem qualquer chave, cinco componentes funcionam sem emblema e sem limite, por tempo indeterminado.

ComponenteO que traz
statictextEtiqueta com marcação: negrito, cores, ligações, marcas, blocos dobráveis
messageboxCaixa de diálogo modal com tema e botões livres
toasterNotificações ao canto do ecrã, com título, imagem e ações
webbrowserNavegador WebView2 alojado numa janela PowerBuilder
jsonLer e escrever JSON em PowerScript puro (caminhos, tipos, construção)

A escolha é deliberada: os quatro componentes visuais são aqueles com que se depara primeiro, não trazem qualquer modelo de dados próprio e bastam para provar num posto bloqueado que o runtime se instala — o verdadeiro obstáculo antes de qualquer compra. json junta-se a eles porque é escrito em PowerScript puro, sem a DLL: é uma ferramenta de base, não um componente.

A lista vive na DLL. PBT_LicenseStatus devolve-a tal como está, em "free": a sua aplicação pode então anunciar a que tem direito sem chave, em vez de o descobrir componente a componente.

Uma chave válida prevalece sempre: nesses cinco componentes como nos outros, repõe o seu nome e a sua edição.

O emblema #

Cada componente apresenta um emblema «PBToolboxAI — DEMO», que não pode ser ocultado.

Os limites funcionais #

ComponenteLimite em modo de demonstração
tab3 páginas no máximo
ribbon2 separadores no máximo
toolbar6 items apresentados, no conjunto de todas as barras; 6 entradas por nível de menu pendente; 6 escolhas por lista pendente
tilesbox8 mosaicos apresentados
commandpalette5 comandos listados
speechout4 frases e 400 caracteres por leitura (fila incluída), depois é dita a menção demo; passadas as 4 primeiras frases, cada leitura termina com ela
cryptotextos de 2048 caracteres e ficheiros de 2048 bytes no máximo, tanto à entrada como à saída (também uma decifragem ou uma descodificação)
restclientcorpos das respostas cortados a 4096 caracteres, sem transferência, nem envio de ficheiros, nem pedido de intervalo (Range)
soundplayersó os 10 primeiros segundos de um som são tocados (seja qual for a velocidade), e duas notas descendentes dizem-no
videoum filme pára após 10 segundos; nem salto nem captura de imagem para além disso
xmldocumentos de 64 KB no máximo, alterações incluídas
listbar6 entradas apresentadas, no conjunto de todas as secções
statusbar4 painéis apresentados
menubar3 menus na barra, 6 entradas por lista, em cada nível de cascata (os separadores não contam)
radialmenuNo máximo 4 ramos por coroa (menos se ii_max_sectors for menor), sem ramo «Mais»
shellexplorer8 nós por nível da árvore
stepbar4 etapas apresentadas
buttonbar4 botões apresentados; os seguintes não são desenhados nem acionados pelo teclado (a sua letra Alt fica para a janela)
crosstab500 linhas de origem usadas, exportação e cópia desativadas
breadcrumb4 segmentos apresentados, os últimos do caminho
jsontreeAs 200 primeiras linhas do documento apresentadas, 20 000 caracteres no máximo (uma linha mais longa é cortada); a pesquisa e a seleção ficam por elas
xmltreeAs 200 primeiras linhas do documento apresentadas, 20 000 caracteres no máximo (uma linha mais longa é cortada); a pesquisa e a seleção ficam por elas
datagrid100 linhas apresentadas, exportações CSV e Excel desativadas
markdownviewOs 40 primeiros blocos do documento (um título, um parágrafo, uma entrada de lista, uma linha de tabela contam cada um como um; um bloco de código é cortado a 40 linhas), seguidos de uma nota; a pesquisa e o índice ficam por eles
schedulerOs 12 primeiros compromissos do intervalo no ecrã, os outros ficam em memória sem serem apresentados
chartcartesianAs 3 primeiras séries desenhadas, legenda incluída; as outras ficam em memória sem serem apresentadas, e a chave definida mostra-as sem reenviar nada
dockcontainer3 painéis: o quarto of_add_panel devolve -6, o seu controlo fica no seu lugar, visível
Todos os restantesApenas o emblema — nenhum limite funcional

Estes limites aplicam-se à apresentação: nada falha, a apresentação é truncada. É assim possível avaliar realmente cada componente, com os seus dados, antes da compra.

Atribuir uma chave válida levanta instantaneamente todos estes limites e retira o emblema, sem reiniciar a aplicação.


8.5 Perpétua + manutenção #

A licença é perpétua: as versões abrangidas pelo seu período de manutenção funcionam para sempre, inclusivamente após a expiração deste.

Na prática, a chave contém uma data de fim de manutenção, comparada com a data de compilação da DLL:


8.6 Perguntas frequentes #

A minha chave é verificada online? Não. Nunca há rede. A verificação é uma assinatura RSA validada localmente pelo Windows.

Os meus clientes precisam de uma chave? Não. A sua chave runtime está na sua aplicação; eles nunca veem nada relativo à licença.

O que acontece se me esquecer de PBT_SetLicense em produção? A aplicação funciona, mas cada componente apresenta o emblema de demonstração e aplicam-se os limites da tabela acima. É o primeiro ponto a verificar se aparecer um emblema num cliente.

Posso atribuir uma chave dev e uma chave runtime no mesmo código? Sim — é aliás o caso habitual: a dev serve para a execução a partir do IDE, a runtime para a execução do exe. Cada uma é ignorada no outro contexto.

O emblema aparece embora a chave esteja atribuída. Três causas, por ordem de frequência: (1) chave dev quando se está a executar um exe compilado, ou o inverso; (2) retorno de PBT_SetLicense não testado — verificar se é igual a 0; (3) manutenção expirada para a versão de DLL instalada (retorno -3). PBT_LicenseStatus esclarece a situação numa linha.

Uma chave é nominativa. Uma chave dev está associada a um programador, uma chave runtime à sua empresa. Não devem ser partilhadas fora da sua equipa.


← FAQ e resolução de problemas · Índice